jQuery $()。每个vs $ .each()vs for循环

时间:2014-08-26 12:11:42

标签: jquery loops for-loop each

我是JS和Query的新手,所以我认为这是一个非常简单的任务,我想只需要从 $。每个()“loop” >到 $()。each()和for循环。 这是我的代码。

var tab = ["John", "Steve", "Ben", "Damon", "Ian"],
    $list = $('#list');

$.each(tab,function(index,value){
    $list.append("<li>"+ value+ "</li>");
});

第二个和第三个循环不起作用:

tab.each(function(index){
    $list.append("<li>"+ tab[index] + "</li>");
});

for (var i,len=tab.length;i<len;i++) {
    $list.append("<li>"+ tab[i]+ "</li>");
}

有什么问题?

6 个答案:

答案 0 :(得分:5)

正确初始化for循环时出错:

for (var i,len=tab.length;i<len;i++) {
//-------^ - Missing inital value.
    $list.append("<li>"+ tab[i]+ "</li>");
}

更改为:

for (var i=0,len=tab.length;i<len;i++) {
    $list.append("<li>"+ tab[i]+ "</li>");
}

第二个不起作用,因为tab不是要迭代的jQuery对象! :) $.each的语法是:

$.each(dataArray, function() { });

或者,如果你有一个DOM jQuery对象:

$(Selector).each(dataArray, function() { });

答案 1 :(得分:1)

您需要在

中更改为var i=0, len=tab.length
for (var i,len=tab.length;i<len;i++) {
    $list.append("<li>"+ tab[i]+ "</li>");
}

答案 2 :(得分:0)

如果要迭代Javascript数组而不是jQuery选择,则必须使用$ .each,这就是它的工作方式。

至于你的第三个例子,我需要用0初始化。否则它是未定义的,当与数组的长度比较时,它总是为假。

答案 3 :(得分:0)

根据jQuery的文档:

  

$ .each()函数与$(selector).each()不同,后者用于独占于jQuery对象进行迭代。 $ .each()函数可用于迭代任何集合,无论它是对象还是数组。在数组的情况下,回调每次都传递一个数组索引和相应的数组值。 (也可以通过this关键字访问该值,但Javascript将始终将此值包装为Object,即使它是一个简单的字符串或数字值。)

另外see here

以下是您需要记住的内容:

  • 调用jQuery选择的方法位于$ .fn命名空间中,并自动接收并返回选择。
  • $ namespace中的方法通常是实用程序类型的方法,不适用于选择;它们不会自动传递任何参数,它们的返回值也会有所不同。

答案 4 :(得分:0)

将您的JS数组包装成jQuery对象,以便能够调用它们:

$(tab).each(function(){
  $list.append("<li>"+ this + "</li>")
})

并使用零(i = 0)初始化运行变量,此外,出于可读性原因,您不应将tab.length存储到临时变量中:

for(var i=0; i<tab.length; i++) {
  $list.append("<li>"+ tab[i]+ "</li>") 
}

答案 5 :(得分:0)

试试这个,

var tab = ["John", "Steve", "Ben", "Damon", "Ian"];
    for(i=0;i<=tab.length;i++)
    {
        alert(tab[i]);
    }