jQuery 切换嵌套列表行为

发布于 2024-09-28 11:03:47 字数 244 浏览 7 评论 0原文

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

IT 工作正常,但行为略有错误。如果嵌套列表可见并且单击父标题,我希望隐藏该嵌套列表。目前它执行此操作,但随后直接显示嵌套列表。

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

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

I have a number of nested lists and some jQuery that shows hides them when a parent header is clicked.

IT works fine but the behaviour is slightly wrong. If a nested list is visible and the parent header is clicked i would like that nested list to be hidden. At the moment it does this but then shows the nested list directly after.

Please see this jsFiddle for working code:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

桜花祭 2024-10-05 11:03:47

看这里:
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();
    });

Look here:
http://www.jsfiddle.net/dactivo/c3vPa/

We verify if it is visible, and in that case we hide it:

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

This would be the code:

 $("#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();
    });
追我者格杀勿论 2024-10-05 11:03:47

如果同级

    当前隐藏(有效地使其成为切换),您可以触发显示,如下所示:

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

您可以在此处进行测试。总的来说,您可以简化它并获得相同的效果,如下所示:

$("#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();
});

您可以在这里尝试该版本< /a>.

You can trigger the show if the sibling <ul> is hidden currently (effectively making it a toggle), like this:

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

You can test it out here. Overall you can slim it down and get the same effect though, like this:

$("#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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文