除了一个元素外点击切换

Toggle on click except one element

给定以下 html 结构,如何使 #top-bar-toggle 在单击时切换,但单击 .top-bar-menu-search 或其子项时除外?

<div id="top-bar-toggle">
    <div id="top-bar-menu">
        <ul class="vertical menu">
            <li>
                <a href="home_link"><h2>Home Item</h2></a>
            </li>
            <li>
                <a href="other_link"><h2>Other Item</h2></a>
                <ul class="nested vertical menu">
                    <li><a href="nested_link"><h2>Nested Item</h2></a></li>
                    <li><a href="nested_link"><h2>Nested Item</h2></a></li>
                    <li><a href="nested_link"><h2>Nested Item</h2></a></li>
                </ul>
            </li>
            <li>
                <a href="other_link"><h2>Other Item</h2></a>
                <ul class="nested vertical menu">
                    <li><a href="nested_link"><h2>Nested Item</h2></a></li>
                    <li><a href="nested_link"><h2>Nested Item</h2></a></li>
                    <li><a href="nested_link"><h2>Nested Item</h2></a></li>
                </ul>
            </li>
            <li class="top-bar-menu-search">
                <form id="searchform" method="get" role="search">
                    <div class="input-group">
                        <span class="input-group-label"></span>
                        <input type="text" placeholder="Search" id="s" name="s" value="" class="input-group-field">
                    </div>
                </form>
            </li>
        </ul>
    </div>
</div>

我认为以下 jquery 代码可以工作,但 #top-bar-toggle 元素无论如何都会被切换...

$('#top-bar-toggle').not('.top-bar-menu-search').click(function() {
    $(this).fadeToggle();
});

提前致谢!

你应该给所有元素 class "A" 例如然后在 class 的 onclick 上检查元素的 id 是否不例外 id 切换它...... $(".A").on("click",函数(){

if($(this).attr("id")!="B") $(this).fadeToggle()

})

我认为你需要使用 jquery 的 stopPropagation 方法。

$('#top-bar-toggle').click(function() {
    console.log("topbar clicked");
  });
  $('.top-bar-menu-search').click(function(e) {
     e.stopPropagation();
    console.log("searchbar clicked");
  });

也许这段代码能帮到你

$('#top-bar-menu>ul>li>a').on('click', function(e) {
  e.preventDefault();

  $(this).siblings('ul').toggle();

});