jquery Twitter引导崩溃:突出显示选定的折叠项

qvsjd97n  于 2022-11-28  发布在  jQuery
关注(0)|答案(2)|浏览(154)

我想突出显示选定的折叠项。为了实现这一点,我用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");
});
b1zrtrql

b1zrtrql1#

这里有两种情况需要考虑:
1.如果用户单击活动项目,则停用该项目
1.如果用户单击非活动项目,则停用所有项目,然后激活此项目。
您当前的解决方案无法检测哪个项目已处于活动状态。您可以使用$.hasClass函数来检查您单击的项目是否已处于活动状态。
下面是一个分叉的jsFiddle结果:http://jsfiddle.net/Willyham/6v7Rn/

kiayqfof

kiayqfof2#

您可以绑定accordion-bodyhideshow事件,以设置折叠项的状态。双击不会出现问题。
我重用了Will Demaine的代码。下面是演示:http://jsfiddle.net/kXTc6/1/

相关问题