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

如何为导航栏菜单元素添加active类并仅保留当前选中项高亮

问题根源

你现有代码的问题是点击菜单项时仅处理了当前点击元素的active类状态,没有先清空所有其他导航项的激活类,导致多个元素同时持有active类,出现多个高亮项的问题。
另外你原代码里的if(item.className === "active")判断存在逻辑漏洞:如果li元素有其他自定义类名,该全等判断会直接失效,且classList.remove方法调用时如果元素没有对应类也不会抛出异常,不需要提前做存在性判断。

修复代码

HTML结构(无需修改)

<header>
  <nav>
    <ul>
      <li><a href="#">home</a></li>
      <li><a href="#">about</a></li>
      <li><a href="#">service</a></li>
      <li><a href="#">profile</a></li>
      <li><a href="#">portfolio</a></li>
      <li><a href="#">contact</a></li>
    </ul>
  </nav>
</header>

JS逻辑

// 预获取所有导航li元素,避免重复查询DOM
const navItems = document.querySelectorAll('nav ul li');

navItems.forEach(item => {
  item.addEventListener('click', () => {
    // 统一移除所有导航项的active类
    navItems.forEach(nav => nav.classList.remove('active'));
    // 仅给当前点击项添加active类
    item.classList.add('active');
  });
})

实现逻辑

  • 每次点击任意导航项时,先全局清空所有导航的激活状态,保证此时没有任何高亮项
  • 仅给当前触发点击事件的菜单项添加激活类,最终实现同一时间只有一个选中项的效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 00:54:05