You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用JavaScript实现点击主菜单默认展开二级及三级子菜单项的方法

JavaScript 实现多级菜单点击展开方案

以下是可直接复用的实现代码,匹配你需要的点击主菜单同时展开二三级子菜单的效果:

1. 嵌套菜单HTML结构

<ul class="menu-container">
  <!-- 主菜单项1 -->
  <li class="primary-menu">
    <div class="primary-title">系统管理</div>
    <!-- 二级菜单 -->
    <ul class="secondary-menu">
      <li class="secondary-item">
        <span>用户管理</span>
        <!-- 三级菜单 -->
        <ul class="tertiary-menu">
          <li>用户列表</li>
          <li>角色配置</li>
        </ul>
      </li>
      <li class="secondary-item">
        <span>权限管理</span>
        <ul class="tertiary-menu">
          <li>权限分配</li>
          <li>操作日志</li>
        </ul>
      </li>
    </ul>
  </li>
  <!-- 主菜单项2 -->
  <li class="primary-menu">
    <div class="primary-title">业务中心</div>
    <ul class="secondary-menu">
      <li class="secondary-item">
        <span>订单管理</span>
        <ul class="tertiary-menu">
          <li>订单列表</li>
          <li>订单导出</li>
        </ul>
      </li>
    </ul>
  </li>
</ul>

2. 基础样式CSS

通过active类控制子菜单的显示隐藏,默认收起所有子菜单:

ul, li {
  list-style: none;
  padding: 0;
  margin: 0;
  box-sizing: border-box;
}
.primary-title {
  padding: 12px 16px;
  background: #f5f5f5;
  cursor: pointer;
  font-weight: 500;
}
/* 默认隐藏二三级菜单 */
.secondary-menu, .tertiary-menu {
  display: none;
  padding-left: 20px;
}
.secondary-item {
  padding: 8px 16px;
  cursor: pointer;
  background: #fafafa;
}
.tertiary-menu li {
  padding: 6px 16px;
  background: #fff;
  cursor: pointer;
}
/* 激活状态显示子菜单 */
.primary-menu.active .secondary-menu,
.secondary-item.active .tertiary-menu {
  display: block;
}

3. 交互逻辑JavaScript代码

// 获取所有主菜单项
const primaryMenus = document.querySelectorAll('.primary-menu')

// 绑定主菜单点击事件
primaryMenus.forEach(menu => {
  const title = menu.querySelector('.primary-title')
  title.addEventListener('click', () => {
    // 切换当前主菜单展开/收起状态
    menu.classList.toggle('active')
    // 展开主菜单时自动展开所有二级、三级菜单
    if (menu.classList.contains('active')) {
      const secondaryItems = menu.querySelectorAll('.secondary-item')
      secondaryItems.forEach(item => item.classList.add('active'))
    }
  })
})

// 可选:页面加载后默认展开第一个主菜单及其下所有子菜单
window.addEventListener('DOMContentLoaded', () => {
  if (primaryMenus.length) {
    primaryMenus[0].classList.add('active')
    const firstMenuSecondaryItems = primaryMenus[0].querySelectorAll('.secondary-item')
    firstMenuSecondaryItems.forEach(item => item.classList.add('active'))
  }
})

如果你需要支持点击二级菜单单独控制对应三级菜单的展开收起,只需要给二级菜单项也绑定类似的点击切换active类的逻辑即可。

内容的提问来源于stack exchange,提问作者Sanihita

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 17:15:01