我已经设置了使用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的查询,像我上面那样,和其他在这里您可以定义一个函数来进行过滤。如果函数返回假,则该元件被移除。

在这种情况下,查询移除任何东西,其不(:not)具有(:has)一个与子类“中选择了”(.selected)。我用这里的.selected选择,因为这是手风琴添加到当前打开的面板。

如果你只有一个手风琴,或者你给每个手风琴的某种标识,如类名,那么你可以大大降低整个脚本。比方说,你想变成一个手风琴的每个元素,你给它一个类“协议”。

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

这是更加清晰,易于维护,因为你可以很容易地在未来增加更多的手风琴,如果你想,这将处理它。

有过滤器的文档是在这里: http://docs.jquery.com/Traversing/filter

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top