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

Bootstrap 4.6:点击子菜单跳转页面后如何保持折叠菜单展开

实现跳转后保持子菜单展开的三种方案

从你的代码能看出用的是Bootstrap折叠组件,下面是三种直接可用的解决方法:

方案1:通过URL参数标记

在子菜单的跳转链接里加个参数(比如?activeMenu=submenu1),页面加载时读取这个参数,自动展开对应菜单。

步骤1:修改子菜单链接

比如子菜单里的跳转链接改成:

<li><a class="nav-link" href="/profile.html?activeMenu=submenu1">个人资料</a></li>

步骤2:添加页面加载时的JS代码

// 页面加载完成后执行
document.addEventListener('DOMContentLoaded', function() {
  // 获取URL里的activeMenu参数
  const urlParams = new URLSearchParams(window.location.search);
  const activeMenu = urlParams.get('activeMenu');
  
  if (activeMenu) {
    // 找到对应的折叠菜单,添加show类使其展开
    const collapseMenu = document.getElementById(activeMenu);
    if (collapseMenu) {
      collapseMenu.classList.add('show');
      collapseMenu.setAttribute('aria-expanded', 'true');
      // 找到对应的父级nav-link,去掉collapsed类
      const parentLink = collapseMenu.previousElementSibling;
      if (parentLink && parentLink.classList.contains('nav-link')) {
        parentLink.classList.remove('collapsed');
        parentLink.setAttribute('aria-expanded', 'true');
      }
    }
  }
});

方案2:通过当前页面路径匹配

如果子菜单链接指向具体页面(比如/account/settings.html),可以直接通过当前页面路径判断,不用加URL参数。

JS代码示例

document.addEventListener('DOMContentLoaded', function() {
  // 获取当前页面的路径部分
  const currentPath = window.location.pathname;
  
  // 匹配对应子菜单的页面路径,展开对应的菜单
  if (currentPath.includes('/profile.html') || currentPath.includes('/settings.html')) {
    // 展开submenu1
    const collapseMenu = document.getElementById('submenu1');
    collapseMenu.classList.add('show');
    collapseMenu.setAttribute('aria-expanded', 'true');
    const parentLink = collapseMenu.previousElementSibling;
    parentLink.classList.remove('collapsed');
    parentLink.setAttribute('aria-expanded', 'true');
  }
});

方案3:使用本地存储记录状态

点击子菜单时,把当前展开的菜单ID存在localStorage里,页面加载时读取这个ID展开菜单,适合同一域名下的页面跳转。

步骤1:给子菜单链接加点击事件

<!-- 修改子菜单的a标签,添加点击事件 -->
<li><a class="nav-link" href="/profile.html" onclick="saveActiveMenu('submenu1')">个人资料</a></li>

步骤2:添加JS代码

// 保存当前激活的菜单ID
function saveActiveMenu(menuId) {
  localStorage.setItem('activeCollapseMenu', menuId);
}

// 页面加载时读取并展开
document.addEventListener('DOMContentLoaded', function() {
  const activeMenu = localStorage.getItem('activeCollapseMenu');
  if (activeMenu) {
    const collapseMenu = document.getElementById(activeMenu);
    if (collapseMenu) {
      collapseMenu.classList.add('show');
      collapseMenu.setAttribute('aria-expanded', 'true');
      const parentLink = collapseMenu.previousElementSibling;
      parentLink.classList.remove('collapsed');
      parentLink.setAttribute('aria-expanded', 'true');
    }
  }
});

注意事项

  • 确保已经引入Bootstrap的CSS和JS,折叠组件能正常工作
  • 如果用方案3,可在用户手动折叠菜单时删除localStorage里的对应项,避免状态残留

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 06:05:17