【发布时间】:2012-08-05 02:48:14
【问题描述】:
我有 6 个列表项
$('.favorite-tag-group li').each(function(){
console.log("hi");
});
然而,此代码在控制台中显示“hi”24 次。
我能想到的唯一可能导致它出错的是因为我的列表项不是都在同一个列表中。
例如,.favorite-tag-group 是一个始终包含 ul 的 div。在某些情况下,该 ul 将只有 1 li。有时它可能有 2 个。
这是一个可能看起来像的示例
div.favorite-tag-group
ul
li
li
li
div.favorite-tag-group
ul
li
div.favorite-tag-group
ul
li
div.favorite-tag-group
ul
li
li
我要做的就是运行 .each() li 以便我可以删除重复项;/
一些真实的html:
<div class="favorite-tag-group">
<h4>gobty</h4>
<ul class="resources led-view">
<li class="clearfix r-tutorial" data-id="22">
</li>
</ul>
</div>
<div class="favorite-tag-group">
<h4>javascript</h4>
<ul class="resources led-view">
<li class="clearfix r-tutorial" data-id="24">
</li>
</ul>
</div>
<div class="favorite-tag-group">
<h4>macvim</h4>
<ul class="resources led-view">
<li class="clearfix r-tool" data-id="21">
</li>
</ul>
</div>
这是真正的功能。当我将 .each() 直接粘贴到控制台时它可以工作,但在这个函数内部它不起作用:
// collapse tags functionality
$('.collapse-tags').click(function(e){
e.preventDefault();
$('.favorites-helpers, .favorite-tag-group h4').slideUp(200, function(){
var seen = {};
$('.favorite-tag-group li').each(function(){
//console.log("hi");
var currentId = $(this).data('id');
if (seen[currentId]) {
$(this).slideUp(200);
} else {
seen[currentId] = true;
}
});
});
});
【问题讨论】:
-
根据您的问题中的示例,您希望
hi出现多少次? -
在上面的例子中,6次。
-
啊.. 是的,7. 我的错。我希望 7. 实际上,我得到列表项的数量 * 组的数量......所以 28
-
对我来说很好用:jsfiddle.net/ECS2K Chrome/Win7
-
@Tallboy,这是因为
$('.favorites-helpers, .favorite-tag-group h4')将导致多个元素到slideUp(),因此回调被多次执行。将var seen = {}移动到回调内部会将变量重置为每个回调中的空对象。您仍然会多次迭代您的列表项(如多个console.log()s 所见),但您每次都会以这种方式向上滑动相同的重复li。希望你能学到一些东西!
标签: javascript jquery html foreach each