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

点击侧边栏子项时菜单自动关闭,求保持展开的解决方案

解决方案

1. 阻止子菜单点击触发父菜单折叠

添加以下JavaScript代码,阻止子菜单项的点击事件冒泡到父级treeview元素,避免父菜单被意外折叠:

// 监听所有子菜单项的点击事件
document.querySelectorAll('.treeview-menu a').forEach(link => {
  link.addEventListener('click', function(e) {
    // 阻止事件向上冒泡,避免触发父菜单的折叠逻辑
    e.stopPropagation();
  });
});

2. 页面加载时自动展开当前页面对应的父菜单

刷新页面后,为了让当前页面所在的父菜单保持展开状态,添加以下JS代码,根据当前URL匹配对应的子菜单,给父级treeview添加展开标识类:

document.addEventListener('DOMContentLoaded', function() {
  // 获取当前页面的文件名(比如 competitions.php)
  const currentPage = window.location.pathname.split('/').pop();
  
  // 遍历所有子菜单项
  document.querySelectorAll('.treeview-menu a').forEach(link => {
    // 匹配当前页面的链接
    if (link.getAttribute('href') === currentPage) {
      // 找到父级treeview元素,添加展开和激活类
      const parentTreeview = link.closest('.treeview');
      if (parentTreeview) {
        parentTreeview.classList.add('active', 'menu-open');
      }
    }
  });
});

3. 可选:后端辅助标记优化

如果你的项目支持后端渲染,可以在访问对应页面时,给当前子菜单项的<li>标签添加active类,这样前端逻辑可以更简化:

<!-- 示例:访问competitions.php时渲染的标记 -->
<li class="active"><a href="competitions.php"><i class="fa fa-plus"></i>Manage Competitions</a></li>

对应的简化JS代码:

document.addEventListener('DOMContentLoaded', function() {
  const activeSubmenu = document.querySelector('.treeview-menu .active');
  if (activeSubmenu) {
    const parentTreeview = activeSubmenu.closest('.treeview');
    parentTreeview.classList.add('active', 'menu-open');
  }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 19:30:34