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

如何实现仅点击不含has-sub类的sidebar-item时触发指定事件?

仅点击不含has-sub类的sidebar-item时执行代码

需要实现:点击导航菜单中不含has-sub类的.sidebar-item元素时执行特定代码。但目前给sidebar元素绑定了点击事件,点击sidebar任意区域都会触发逻辑,如何修改代码满足需求?

相关HTML结构

<div class="sidebar-menu">
    <ul class="menu">
        <li class="sidebar-title">Menu</li>
        <li class="sidebar-item">
            <a href="/" class="sidebar-link active">
                <i class="bi bi-grid-fill"></i>
                <span>Dashboard</span>
            </a>
        </li>
        <li class="sidebar-item">
            <a href="/Counter" class="sidebar-link">
                <i class="bi bi-grid-fill"></i>
                <span>Counter</span>
            </a>
        </li>
        <li class="sidebar-item  has-sub">
            <a href="#" class="sidebar-link">
                <i class="bi bi-stack"></i>
                <span>Components</span>
            </a>
            <ul class="submenu ">
                <li class="submenu-item ">
                    <a href="component-alert.html">Alert</a>
                </li>
            </ul>
        </li>
    </ul>
</div>

当前代码

let sidebarEl = document.getElementById("sidebar")
sidebarEl.addEventListener("click", function () {
    var w = window.innerWidth;
    if (w <= 991) {
        sidebarEl.classList.remove("active");
    }
});

修改方案

利用事件委托特性,在点击回调中精准判断目标元素:

let sidebarEl = document.getElementById("sidebar")
sidebarEl.addEventListener("click", function (event) {
    // 从点击元素向上查找最近的sidebar-item
    const targetItem = event.target.closest('.sidebar-item');
    
    // 仅当找到目标元素且该元素不含has-sub类时执行逻辑
    if (targetItem && !targetItem.classList.contains('has-sub')) {
        var w = window.innerWidth;
        if (w <= 991) {
            sidebarEl.classList.remove("active");
        }
        // 在这里添加你需要执行的其他特定代码
    }
});

关键说明

  • event.target.closest('.sidebar-item'):不管点击的是.sidebar-item本身还是它内部的子元素(比如<a>、图标、文字),都会正确匹配到对应的父级.sidebar-item元素
  • !targetItem.classList.contains('has-sub'):过滤掉带有下拉菜单的.sidebar-item,确保只有普通菜单项触发逻辑
  • 点击sidebar的其他区域(比如.sidebar-title、子菜单区域)时,不会执行目标代码,完全符合需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 17:10:32