jQuery切换嵌套列表行为

时间:2010-10-21 12:31:03

标签: jquery nested accordion

我有许多嵌套列表和一些jQuery,显示在单击父标题时隐藏它们。

IT工作正常但行为稍有不妥。如果嵌套列表可见并且单击了父标题,我希望隐藏嵌套列表。此时它会执行此操作,但之后会直接显示嵌套列表。

请参阅此jsFiddle了解工作代码:

http://www.jsfiddle.net/4kG2b/

2 个答案:

答案 0 :(得分:2)

看这里: http://www.jsfiddle.net/dactivo/c3vPa/

我们验证它是否可见,在这种情况下我们隐藏它:

 if( $nestList.is(':visible'))

这将是代码:

 $("#expander ul").hide();
    $("#expander h4").live("click", function(e) {

        var $this = $(this);
        var $nestList = $($this).parent().find("ul");
        var $scrollPane = $(".scroll");

        // hide visible nested lists
        $("#expander ul:visible").hide("fast", function(){
            $(this).closest("li").removeClass("open").addClass("closed");
        });
        // show this list
        if( $nestList.is(':visible'))
        {
          $nestList.hide();   
        }
        else
        {
        $nestList.show("fast", function() {
            $(this).closest("li").removeClass("closed").addClass("open");
        });
        }
        // resize scrollbars
        $scrollPane.jScrollPane();

        e.preventDefault();
    });

答案 1 :(得分:1)

如果兄弟<ul>当前被隐藏(实际上是切换),您可以触发该节目,如下所示:

    $nestList.filter(":hidden").show("fast", function() {
        $(this).closest("li").removeClass("closed").addClass("open");
    });

You can test it out here。总的来说,你可以减少它并获得相同的效果,例如:

$("#expander ul").hide();
$("#expander h4").live("click", function() {
    $(this).siblings("ul").toggle("fast", function(){
        $(this).closest("li").toggleClass("open closed");
    }).closest("li").siblings(".open").toggleClass("open closed")
                    .children("ul").hide("fast");

    $(".scroll").jScrollPane();
});

You can try that version out here