【问题标题】:How to close sub menu items using jquery this如何使用 jquery 关闭子菜单项
【发布时间】:2013-10-28 23:26:29
【问题描述】:

我创建了一个具有三个级别的菜单,并且希望在您单击新的子菜单标题时关闭所有打开的子菜单。我已经设法让它适用于第一个子菜单但不适用于第二个子菜单,当我点击第二个子菜单时它会关闭,因为我试图为两个级别重用同一个类有没有办法解决这个问题?此外,由于我已经删除了函数中的类,当您单击它们的标题时它已经停止关闭子菜单,有没有办法做到这一点:

HTML:

 <nav id="main-nav" role="navigation">
        <div class="block">
            <h2 class="block-title">Main menu</h2>
            <ul>
                <li class="is-active">
                    <a href="#">Link</a>
                </li><!--
             --><li>
                    <a class="toggle-sub-nav" href="#">Link ></a>
                      <ul class="sub-nav">
                          <li><a href="#">Sub link</a></li>
                          <li><a href="#">Sub link</a></li>
                          <li><a href="#">Sub link</a></li>
                      </ul>
                </li><!--
             --><li>
                    <a href="#">Link</a>
                </li><!--
             --><li>
                    <a class="toggle-sub-nav" href="#">Link ></a>
                    <ul class="sub-nav">
                          <li><a href="#">Sub link</a></li>
                          <li> <a class="toggle-sub-nav" href="#">Sub Link ></a>
                    <ul class="sub-nav">
                          <li><a href="#">Sub link</a></li>
                          <li><a href="#">Sub link</a></li>
                          <li><a href="#">Sub link</a></li>
                      </ul></li>
                          <li><a href="#">Sub link</a></li>
                      </ul>
                </li><!--
             --><li>
                    <a href="#">Link</a>
                </li>
            </ul>
           </div>
</nav>

子菜单的CSS:

.sub-nav { 

     height: 0px;
    -webkit-transition: all 600ms cubic-bezier(.42,0,.58,1);
    -moz-transition: all 600ms cubic-bezier(.42,0,.58,1);
    -o-transition: all 600ms cubic-bezier(.42,0,.58,1);
    -ms-transition: all 600ms cubic-bezier(.42,0,.58,1);
    transition: all 600ms cubic-bezier(.42,0,.58,1);
    overflow:hidden;

  }


  .sub-nav-open {

    height: auto;
    max-height: 500px;

  }

.sub-nav li { background-color: #666; } 

jquery:

$(function() {
    $(".toggle-sub-nav").click(function() {
        $('.sub-nav').removeClass('sub-nav-open');
            $(this).next(".sub-nav").toggleClass('sub-nav-open');
            return false;
    });
}); 

【问题讨论】:

    标签: jquery drop-down-menu css-transitions


    【解决方案1】:

    您可以使用notclosest来避免关闭第一级。

    代码:

    $(function () {
        $(".toggle-sub-nav").click(function () {
            $('.sub-nav').not($(this).closest('.sub-nav')).removeClass('sub-nav-open');
            $(this).next(".sub-nav").toggleClass('sub-nav-open');
            return false;
        });
    });
    

    演示:http://jsfiddle.net/IrvinDominin/CnEy8/

    【讨论】:

    • 谢谢你的作品。你知道我怎样才能在再次单击标题时关闭子菜单吗?
    • 太棒了,正是我想要的。谢谢你:)
    • 您好,我注意到 Android Google chrome 存在一个问题。当您打开一个子菜单然后在下次打开它时再次关闭它时,子菜单链接丢失了您是否遇到过这种情况?
    • Irvin 的第二个 Fiddle 可以完成这项工作,但请记住 andSelf 在 1.8 中已被弃用并随后被删除。你会想要使用 addBack。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-20
    • 1970-01-01
    • 2021-06-20
    • 1970-01-01
    • 1970-01-01
    • 2015-08-14
    • 1970-01-01
    相关资源
    最近更新 更多