Jquery手风琴关闭然后打开
问题描述:
我已经使用jquery手风琴插件在页面上设置了一些手风琴,这样我就可以实现全部展开并折叠所有功能。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)
;
它只会命中第二个命令,并不会先关闭它们。有什么建议么?
答
我不完全确定你在做什么,但这是我最好的猜测。在所有手风琴中,您希望“全部打开”按钮打开所有已关闭的手风琴(即没有部分显示)。我会通过使用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
答
jQuery('#accordion').accordion({
active:-1,
});
哇!那很完美!你能向我解释.filter代码行吗?它工作的很好,但我真的很想明白它为将来的参考做什么(我是jquery的新手)。谢谢你的帮助! Jon – Jon 2008-12-22 13:25:34
很好的解释!这对未来会有很大的帮助。 – Jon 2008-12-22 15:20:13