我想突出显示选定的折叠项。为了实现这一点,我用addClass()方法为可折叠标题和可折叠组添加了新的类(可折叠标题突出显示和可折叠组突出显示),但出现了一个问题。
如果我在可折叠项目关闭时单击它,它可以正常工作。但是,如果我在打开的可折叠项目上单击,它的折叠式标题背景色无法更改为原始颜色。
您可以在此处进行测试:http://jsfiddle.net/uuZAK/
我该如何解决这个问题?
HTML是:
<div class="accordion" id="accordion">
<div class="accordion-group">
<div class="accordion-heading">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion" href="#collapseOne">
Collapsible Group Item #1
</a>
</div>
<div id="collapseOne" class="accordion-body collapse" style="height: 0px; ">
<div class="accordion-inner">
s1
</div>
</div>
</div>
<div class="accordion-group">
<div class="accordion-heading">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion" href="#collapseTwo">
Collapsible Group Item #2
</a>
</div>
<div id="collapseTwo" class="accordion-body collapse" style="height: 0px; ">
<div class="accordion-inner">
s2
</div>
</div>
</div>
<div class="accordion-group">
<div class="accordion-heading">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion" href="#collapseThree">
Collapsible Group Item #3
</a>
</div>
<div id="collapseThree" class="accordion-body in collapse">
<div class="accordion-inner">
s3
</div>
</div>
</div>
</div>
CSS是:
.accordion-heading {
background: #ccc;
position: relative;
}
.accordion-heading a {
color: #666;
font-size: 14px;
text-decoration: none;
}
.accordion-heading-active {
background: #444;
font-weight: bold;
font-size: 14px;
color: #fff;
}
.accordion-heading-active a {
color: #fff;
}
.accordion-heading-active a:hover {
color: #fff;
}
.accordion-group-active {
border: 2px #444 solid;
}
JavaScript + jQuery(1.7.2)的代码是:
$(function(){
$('.accordion').collapse();
// highlight default collapse item
var $init;
$init = $(".accordion-body.in");
$init.parent().addClass("accordion-group-active");
$init.prev().addClass("accordion-heading-active");
});
$(".accordion-toggle").click(function(){
$(".accordion-heading").removeClass("accordion-heading-active");
$(".accordion-heading").parents(".accordion-group").removeClass("accordion-group-active");
$(this).parent().addClass("accordion-heading-active");
$(this).parents(".accordion-group").addClass("accordion-group-active");
});
2条答案
按热度按时间b1zrtrql1#
这里有两种情况需要考虑:
1.如果用户单击活动项目,则停用该项目
1.如果用户单击非活动项目,则停用所有项目,然后激活此项目。
您当前的解决方案无法检测哪个项目已处于活动状态。您可以使用
$.hasClass
函数来检查您单击的项目是否已处于活动状态。下面是一个分叉的jsFiddle结果:http://jsfiddle.net/Willyham/6v7Rn/
kiayqfof2#
您可以绑定
accordion-body
的hide
和show
事件,以设置折叠项的状态。双击不会出现问题。我重用了Will Demaine的代码。下面是演示:http://jsfiddle.net/kXTc6/1/