首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jQuery折叠菜单

问jQuery折叠菜单
EN

Stack Overflow用户
提问于 2009-12-18 03:39:10
回答 4查看 2.6K关注 0票数 0

我正在尝试制作一个可以折叠的菜单,标记如下:

无论何时单击.cat_menu_header,它下面的ul都应该展开,所有展开的ul都应该折叠。因此,我们从所有折叠的元素开始,只显示.cat_menu_header元素,一次最多展开1个.submenu。

代码语言:javascript
复制
<ul id='sidebarNav'>
  <li class='cat_menu_header'><a class='collapsed' href='#'>Link 1
    <ul class='submenu'>
      <li><a href='#'>text 1</a></li>
      <li><a href='#'>text 2</a></li>
    </ul>
  </li>
  <li class='cat_menu_header'><a class='collapsed' href='#'>Link 2
    <ul class='submenu'>
      <li><a href='#'>text 3</a></li>
      <li><a href='#'>text 4</a></li>
    </ul>
  </li>
</ul>

下面的js使每个.submenu展开和折叠,但我不知道如何选择所有展开的ul和折叠它们。我添加了.collapsed类,可以使用toggleClass将其更改为.expanded。

我知道我快到了..。

代码语言:javascript
复制
    $(document).ready(function(){   
    //sidebar collapsible menu
    $("#sidebarNav > li > ul").hide();

    $("#sidebarNav a.collapsed").click(function() {
        $(this).toggleClass("expanded").toggleClass("collapsed").find("+ ul").slideToggle("fast");
        return false;
    });
});
EN

回答 4

Stack Overflow用户

发布于 2009-12-18 04:01:43

首先,你的"li.cat_menu_header a“标签没有关闭。

代码语言:javascript
复制
<ul id="sidebarNav">
    <li class="cat_menu_header collapsed">
        <a href="#">Link 1</a>
        <ul class="submenu">
            <li><a href="#">text 1</a></li>
            <li><a href="#">text 2</a></li>
        </ul>
    </li>

    <li class="cat_menu_header collasped">
        <a href="#">Link 2</a>
        <ul class="submenu">
            <li><a href="#">text 1</a></li>
            <li><a href="#">text 2</a></li>
        </ul>
    </li>
</ul>

为了使用li.cat_menu_header ()函数,用collasped或expanded类标记siblings更容易。如果您希望保持操作与上下文相关,例如,如果您为多个侧边栏初始化此事件,这将非常有用。

代码语言:javascript
复制
jQuery( function()
{
    $("#sidebarNav ul.submenu").hide();

    $("#sidebarNav li.cat_menu_header > a").click( function()
    {
        $(this).parent().siblings( ".expanded" ).addClass( "collapsed" ).slideUp( "fast" );
        $(this).parent().addClass( "expanded" ).removeClass( "collapsed" );
        $(this).next().slideDown( "fast" );
    } );
} );

这个例子使"li.cat_menu_header a“只需展开它的”子菜单“。

票数 1
EN

Stack Overflow用户

发布于 2009-12-18 03:55:19

因此,我要做的就是引用当前单击的项:

代码语言:javascript
复制
var $this = $(this);

然后关闭所有链接:

代码语言:javascript
复制
$('.submenu').hide();

然后打开你想要的:

代码语言:javascript
复制
$this.show()

这应该会让你朝着正确的方向前进。对于这种类型的操作,您也可能不应该使用“切换”,因为它将是一个主要的PITA。只需使用click(),关闭所有内容,在所有内容关闭后打开单击的内容。

票数 0
EN

Stack Overflow用户

发布于 2009-12-18 04:01:24

代码语言:javascript
复制
function helper(ele) {
    ele.toggleClass("expanded")
       .toggleClass("collapsed")
       .find("+ ul")
       .slideToggle("fast");
}
$("#sidebarNav a.collapsed").live("click", function() {
    //just close the ones which are open
    helper($("ul#sidebarNav a.expanded"));
    helper($(this));
    return false;
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1924062

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档