代码之家  ›  专栏  ›  技术社区  ›  Jon

Jquery手风琴关闭然后打开

  •  10
  • Jon  · 技术社区  · 16 年前

    我已经使用jqueryaccordion插件在一个页面上设置了许多accordion,因此我可以实现全部展开和全部折叠功能。

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

    它将只命中第二个命令,而不会首先全部关闭它们。有什么建议吗?

    3 回复  |  直到 16 年前
        1
  •  33
  •   nickf    16 年前

    filter()

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

    这就是你想要的吗?


    编辑以解释过滤器功能:

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

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

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

    这是更易读和维护,因为你可以很容易地添加更多的手风琴在未来,如果你愿意,这将处理它。

    过滤器的文档如下所示: http://docs.jquery.com/Traversing/filter

        2
  •  2
  •   Awais Qarni Leonardo Conde    13 年前
    jQuery('#accordion').accordion({        
        active:-1,
    });