Javascript .每个人的举止都很怪异

Javascript .每个人的举止都很怪异,javascript,jquery,html,foreach,each,Javascript,Jquery,Html,Foreach,Each,我有6项清单 $('.favorite-tag-group li').each(function(){ console.log("hi"); }); 然而,该代码在控制台中显示“hi”24次 我能想到的唯一一件可能导致它出错的事情是,我的列表项并不都在同一个列表中 例如,.favorite标记组是一个始终包含ul的div。在某些情况下,ul将只有1 li。有时它可能有两个 这是一个可能看起来像什么的示例 div.favorite-tag-group ul li li

我有6项清单

$('.favorite-tag-group li').each(function(){
  console.log("hi"); 
});
然而,该代码在控制台中显示“hi”24次

我能想到的唯一一件可能导致它出错的事情是,我的列表项并不都在同一个列表中

例如,
.favorite标记组
是一个始终包含ul的div。在某些情况下,ul将只有1 li。有时它可能有两个

这是一个可能看起来像什么的示例

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>  
给你,先生

$(document).ready(function(){
    $("div.favorite-tag-group>ul").children("li").each(function(index,element){
         //code here
        //refer to element as $(element)
         //to get the id of the element use: $(element).attr("id");
      });
});​
演示:

链接:


正如我在上面的评论中所说。。。再进一步解释一下

这是因为
$('.favorites helpers,.favorite tag group h4')
将导致多个元素
slideUp()
,因此回调将执行多次。将
var seen={}
移动到回调内部会将变量重置为每个回调中的空对象。您仍然会多次迭代列表项(如多个
console.log()
s所示),但每次都会以这种方式向上滑动相同的
li

你问:“我仍然困惑的一件事是,如果它在回调之外,为什么它不能看到SEED的范围?变量范围不会说它可以看到它,因为它在函数之外吗?”

是的,你是对的-回调可以看到
seen
,但是
seen
从未清空/重置,因此在回调的第二次迭代之后,所有
li
都会调用
。slideUp()

考虑这一点:因为它要么向上滑动副本,要么将
id
添加到
seen
,在第二次回调时,
。each()
再次运行,但它已经充满了您的所有列表项
id
s


希望这足够清楚,如果不只是在下面评论的话,我会尝试给出一些例子。

如果你的问题中有一个例子,你希望
hi
出现多少次?在上面的例子中,6次。啊。。是的,7。我的错误。我预计7点。实际上,我得到了列表项的数量*组的数量。。。所以28对我来说很好:铬/Win7@Tallboy,这是因为
$('.favorites helpers,.favorite tag group h4')
将导致多个元素
slideUp()
,因此回调将执行多次。将
var seen={}
移动到回调内部会将变量重置为每个回调中的空对象。您仍然会多次迭代列表项(如多个
console.log()
s所示),但每次都会以这种方式向上滑动相同的
li
。希望你能学到一些东西<代码>函数(元素,索引){?或
函数(索引,元素){
?是的,
api.jquery.com/each
查看参数。
。each(函数(索引,元素))
噢,哇!很抱歉!谢谢你说出我的愚蠢。我做了必要的更正。这个答案仍然没有解决眼前的问题。虽然标题有点误导,但实际上是
之前的回调。each()
被多次触发。在这种情况下,你的答案没有帮助…-1。哦,对了!是的,理解的力量无处不在YESSSSS@Tallboy-这也可能对您有所帮助:这里他们讨论了检查是否有任何元素已设置动画(使用
.is(':animated')
),然后在条件语句中执行任何进一步的代码。或者这一条:它们使用
.promise().done()
$(document).ready(function(){
    $("div.favorite-tag-group>ul").children("li").each(function(index,element){
         //code here
        //refer to element as $(element)
         //to get the id of the element use: $(element).attr("id");
      });
});​