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

带子菜单的可点击导航栏:点击切换子菜单显示状态问题

导航栏子菜单点击切换显示/隐藏实现方案

方法一:直接操作display属性

这种方式适合快速实现,直接判断子菜单当前的显示状态并切换:

// 获取目标导航项和对应的子菜单
const navItem = document.querySelector('.nav-item');
const subMenu = navItem.querySelector('.sub-menu');

navItem.addEventListener('click', () => {
  // 初始状态若通过CSS设置display:none,style.display会是空字符串,需额外判断
  if (subMenu.style.display === 'none' || subMenu.style.display === '') {
    subMenu.style.display = 'block';
  } else {
    subMenu.style.display = 'none';
  }
});

方法二:CSS类控制(推荐)

将样式与逻辑分离,便于后续维护和扩展动画效果:

  1. 先定义CSS类:
.sub-menu {
  display: none; /* 初始隐藏 */
}
.sub-menu.show {
  display: block; /* 显示状态 */
}
  1. 编写JS切换类:
const navItem = document.querySelector('.nav-item');
const subMenu = navItem.querySelector('.sub-menu');

navItem.addEventListener('click', () => {
  // 使用classList.toggle自动切换类的存在状态
  subMenu.classList.toggle('show');
});

多导航项场景:事件委托优化

如果页面有多个带下拉菜单的导航项,用事件委托减少监听数量,提升性能:

// 给导航容器添加监听
const navContainer = document.querySelector('.nav-container');

navContainer.addEventListener('click', (e) => {
  // 找到点击的导航项父元素
  const targetNavItem = e.target.closest('.nav-item');
  if (!targetNavItem) return; // 不是导航项则终止

  const subMenu = targetNavItem.querySelector('.sub-menu');
  subMenu.classList.toggle('show');
});

内容的提问来源于stack exchange,提问作者Abdul Rehman Javed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 04:50:24