【问题标题】:Jquery Accordion Close then OpenJquery Accordion 关闭然后打开
【发布时间】:2010-09-27 19:02:23
【问题描述】:

我使用 jquery 手风琴插件在页面上设置了许多手风琴,因此我可以实现全部展开和折叠所有功能。

每个 ID 元素都是它自己的手风琴,下面的代码可以将它们全部关闭,无论哪些已经打开:

$("#contact, #address, #email, #sales, #equipment, #notes, #marketingdata")
    .accordion("activate", -1)
;

我的问题是全部展开。当我让它们都用这段代码展开时:

$("#contact, #address, #email, #sales, #equipment, #notes, #marketingdata")
    .accordion("activate", 0)
;

根据之前是否开放,有些会收缩,有些会扩展。

我纠正这个问题的想法是将它们全部折叠,然后在单击全部展开时将它们全部展开。但是,此代码将无法正确执行:

$("#contact, #address, #email, #sales, #equipment, #notes, #marketingdata")
    .accordion("activate", -1)
;
$("#contact, #address, #email, #sales, #equipment, #notes, #marketingdata")
    .accordion("activate", 0)
; 

它只会点击第二个命令,而不是先关闭它们。有什么建议吗?

【问题讨论】:

    标签: jquery jquery-plugins accordion


    【解决方案1】:

    我不确定你在追求什么,但这是我最好的猜测。在所有手风琴中,您希望“全部打开”按钮打开所有关闭的手风琴(即,不显示任何部分)。我会使用filter()

    $("#contact, #address, #email, #sales, #equipment, #notes, #marketingdata")
        .filter(":not(:has(.selected))")
        .accordion("activate", 0)
    ;
    

    这就是你所追求的吗?


    编辑以解释该过滤器功能:

    过滤器功能只是通过过滤器运行您当前的选择,删除任何不匹配的内容。它有两种不同的形式:一种是你传递一个常规的 jQuery 查询,就像我上面所做的那样,另一种是你可以定义一个函数来过滤。如果函数返回 false,则删除该元素。

    在这种情况下,查询将删除任何不 (:not) 具有 (:has) 具有“已选择”类 (.selected) 的子项的内容。我在这里使用了.selected 选择器,因为这是手风琴添加到当前打开的面板的内容。

    如果您只有一个手风琴,或者您为每个手风琴指定了某种标识符,例如类名,那么您可以大大减少整个脚本。假设对于您想变成手风琴的每个元素,您给它一个类“accord”。

    $(".accord:not(:has(.selected))").accordion("activate", 0);
    

    这更加清晰和可维护,因为您可以在将来轻松添加更多手风琴,如果您愿意,这将处理它。

    过滤器的文档在这里:http://docs.jquery.com/Traversing/filter

    【讨论】:

    • 哇!那很完美!你能向我解释一下 .filter 代码行吗?它工作得很好,但我真的很想了解它在做什么以供将来参考(我是 jquery 的新手)。谢谢你的帮助!乔恩
    • 很好的解释!这对未来会有很大帮助。
    • nickf - 很好的解释!我以前从未见过这样的嵌套过滤器。很有启发性。
    • 好动作 nickf,如果我能再次投票给你,我会的。您让网络变得更美好。
    【解决方案2】:
    jQuery('#accordion').accordion({        
        active:-1,
    });
    

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题,并通过一些短代码解决了这个问题,利用 JQuery 的 each() 函数折叠,同时将焦点设置到项目 [0],以便可以恢复正常导航。

      http://spstring.jeffthink.com/?p=49

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-08-20
        • 2013-05-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多