使无限的jQuery变得简单易行

时间:2016-01-20 12:30:57

标签: javascript jquery

我的WordPress网站上有手风琴。

通常它工作正常,在点击不同的标签时添加和删除类,但网站上有一个手风琴有问题:当点击其中一个标签时 - 它不会关闭其余的标签标签。所以我添加了这段代码并且工作正常:

jQuery(document).ready(function($) {
  $("#top11").click(function() {
    $("#collapse202").removeClass("in");
    $("#collapse203").removeClass("in");
  });
  $("#top12").click(function() {
    $("#collapse201").removeClass("in");
    $("#collapse203").removeClass("in");
  });
  $("#top13").click(function() {
    $("#collapse201").removeClass("in");
    $("#collapse202").removeClass("in");
  });

});

我确信有一种方法可以缩短它,有人可以解释一下如何更紧凑吗?

2 个答案:

答案 0 :(得分:3)

一种方法是为每个折叠元素添加data-id。例如:

<div id="collapse201" data-id="top11"></div>
<div id="collapse202" data-id="top12"></div>
<div id="collapse203" data-id="top13"></div>

当然,为了防止手风琴中有很多标签,你应该在标签中使用一个类:

<div id="top11" class="clickingTab"></div>
<div id="top12" class="clickingTab"></div>
<div id="top12" class="clickingTab"></div>

JS代码可能如下所示:

jQuery(document).ready(function($) {
  $(".clickingTab").click(function() {
    var clickedId = $(this).attr("id");
    $("element:not([data-id="+clickedId+"])").removeClass("in");
  });
});

当然可以有更有效的方法来解决您的问题。但对于这个特殊问题,这可能是特定的解决方案。

答案 1 :(得分:2)

如果您的HTML看起来像这样,您可以使用next()函数来定位下一个兄弟元素:

$("#top11, #top12, #top13").click(function() {
	$("#top11, #top12, #top13").next().removeClass("in");
	$(this).next().addClass("in");
});
.in {
  color:red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="top11">top11</div>
<div id="collapse201" class="in">collapse201</div>
<div id="top12">top12</div>
<div id="collapse202" class="in">collapse202</div>
<div id="top13">top13</div>
<div id="collapse203" class="in">collapse203</div>