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