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

如何实现多实例下拉菜单仅同时展开一个?附现有jQuery代码

实现单开下拉菜单的解决方案

嗨,我来帮你搞定这个同一时间只展开一个下拉菜单的需求~你的原代码只处理了当前菜单的切换,但没考虑关闭其他已经展开的菜单,咱们调整一下逻辑就能实现啦:

修改后的jQuery代码

$(".dropdown-tree-a").click(function () {
    // 先关闭所有已经展开的下拉菜单
    $('.dropdown-tree.open-tree').removeClass("open-tree active");
    
    var $parent = $(this).parent('.dropdown-tree');
    // 判断当前菜单是否已经展开
    if ($parent.hasClass('open-tree')) {
        $parent.removeClass("open-tree active");
    } else {
        $parent.addClass("open-tree active");
    }
});

完整的代码示例

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<ul>
    <li class="dropdown-tree">
        <a class="dropdown-tree-a">
            下拉菜单1 <span class="badge pull-right">3</span>
        </a>
        <!-- 这里放你的下拉内容 -->
        <div class="dropdown-tree-content">
            菜单内容1
        </div>
    </li>
    <li class="dropdown-tree">
        <a class="dropdown-tree-a">
            下拉菜单2 <span class="badge pull-right">5</span>
        </a>
        <div class="dropdown-tree-content">
            菜单内容2
        </div>
    </li>
</ul>

<script>
$(".dropdown-tree-a").click(function () {
    $('.dropdown-tree.open-tree').removeClass("open-tree active");
    var $parent = $(this).parent('.dropdown-tree');
    if ($parent.hasClass('open-tree')) {
        $parent.removeClass("open-tree active");
    } else {
        $parent.addClass("open-tree active");
    }
});
</script>

逻辑说明

  • 每次点击下拉触发时,先找到所有带有open-tree类的下拉菜单容器,移除它们的open-tree和active类,这样其他展开的菜单就会关闭。
  • 然后单独处理当前点击的菜单:如果它已经是展开状态,就关闭;如果是收起状态,就展开它。

这样就能保证同一时间只有一个下拉菜单处于展开状态啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:04:37