当前位置:  开发笔记 > 前端 > 正文

Jquery手风琴关闭然后打开

如何解决《Jquery手风琴关闭然后打开》经验,为你挑选了1个好方法。

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

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



1> nickf..:

我不确定你要追求的是什么,但这是我最好的猜测.在你所有的手风琴中,你想要"全部打开"按钮打开所有关闭的手风琴(也就是说,没有任何部分显示).我会通过使用来做到这一点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

推荐阅读
吻过彩虹的脸_378
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有