我使用jquery accordion插件在页面上设置了一些手风琴,所以我可以实现expand all并折叠所有功能.
每个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) ;
它只会击中第二个命令而不是先关闭它们.有什么建议?
我不确定你要追求的是什么,但这是我最好的猜测.在你所有的手风琴中,你想要"全部打开"按钮打开所有关闭的手风琴(也就是说,没有任何部分显示).我会通过使用来做到这一点filter()
$("#contact, #address, #email, #sales, #equipment, #notes, #marketingdata") .filter(":not(:has(.selected))") .accordion("activate", 0) ;
这就是你追求的吗?
编辑以解释该过滤器功能:
过滤器功能只通过过滤器运行您当前的选择,删除任何不匹配的内容.它有两种不同的形式:一种是你传递常规jQuery查询,就像我上面那样,另一种你可以定义一个过滤函数.如果函数返回false,则删除该元素.
在这种情况下,查询将删除任何不(:not
)具有(:has
)子类"selected"(.selected
)的子句.我在.selected
这里使用了选择器,因为这是手风琴添加到当前打开的面板的内容.
如果您只有一架手风琴,或者您为每个手风琴分配了某种类型的标识符,例如类名,那么您可以大大减少整个脚本.让我们说对于你想要变成手风琴的每个元素,你给它类"一致".
$(".accord:not(:has(.selected))").accordion("activate", 0);
这样更易读和可维护,因为如果您愿意,将来可以轻松添加更多的手风琴,并且可以处理它.
过滤器的文档在这里:http://docs.jquery.com/Traversing/filter