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

如何在Bootstrap 5导航栏中高亮当前页?点击标签不高亮如何解决?

问题根因

你之前的所有方案失效的核心原因有两点:

  • 你的导航链接是带跳转属性的,点击后页面会重新加载,点击事件里给元素加的active类会被重置,页面恢复到服务端初始渲染的状态(默认Home带active)
  • 你写的jQuery代码本身存在逻辑错误:$(".nav-link").find(".active")是查找.nav-link子元素中带active类的节点,但active类是直接加在.nav-link元素本身的,所以永远找不到目标,无法移除旧的激活状态。
解决方案

推荐优先用服务端渲染的方案,稳定性最高,不需要依赖前端JS执行:

方案1:PHP服务端渲染时直接添加active类

在你的account.php中读取URL的q参数,直接给对应导航项输出active类即可:

<?php
// 读取当前URL的q参数,默认值为1(对应Home页)
$current_tab = isset($_GET['q']) ? intval($_GET['q']) : 1;
?>
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
  <li class="nav-item">
    <a class="nav-link <?php echo $current_tab == 1 ? 'active' : ''; ?>" aria-current="page" href="account.php?q=1">Home</a>
  </li>
  <li class="nav-item">
    <a class="nav-link <?php echo $current_tab == 2 ? 'active' : ''; ?>" href="account.php?q=2">History</a>
  </li>
  <li class="nav-item">
    <a class="nav-link <?php echo $current_tab == 3 ? 'active' : ''; ?>" href="account.php?q=3">Ranking</a>
  </li>
</ul>

方案2:前端JS实现(无需修改服务端代码)

不要绑定点击事件,改为页面加载完成后,根据当前URL参数给对应导航加激活状态:

document.addEventListener('DOMContentLoaded', function() {
  // 获取当前URL的q参数
  const query = new URLSearchParams(window.location.search);
  const current_q = query.get('q') || '1';
  // 清空所有导航的激活状态
  const navLinks = document.querySelectorAll('.navbar-nav .nav-link');
  navLinks.forEach(link => {
    link.classList.remove('active');
    link.removeAttribute('aria-current');
  });
  // 给当前匹配的导航加激活状态
  const activeLink = document.querySelector(`.nav-link[href="account.php?q=${current_q}"]`);
  if (activeLink) {
    activeLink.classList.add('active');
    activeLink.setAttribute('aria-current', 'page');
  }
});

内容的提问来源于stack exchange,提问作者Mohammad Saif Khan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 10:36:02