11

我使用 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)
; 

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

4

3 回答 3

33

我不确定你在追求什么,但这是我最好的猜测。在所有手风琴中,您希望“全部打开”按钮打开所有关闭的手风琴(即,不显示任何部分)。我会通过使用来做到这一点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

于 2008-12-20T03:03:11.683 回答
2
jQuery('#accordion').accordion({        
    active:-1,
});
于 2010-10-22T20:40:05.797 回答
0

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

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

于 2009-03-09T05:37:52.007 回答