$ .each([collection])vs $([collection])。each()

时间:2010-02-23 20:36:36

标签: jquery json iteration

这两种方法看起来都是produce the same results,但我一直很难让人们相信第二种方法有效,因为它显然并不常见。

// Create some data
var foo = { 'vals':[ {'id':'foo'}, {'id':'bar'} ] }​​​​​​​​​​​​​​​​​;

// Common Method    
$.each(foo.vals, function(i,o){
    alert(this.id);
});

// Alternative (lesser-known?) Method
$(foo.vals).each(function(i,o){
   alert(this.id); 
});

检查来源后,这两个看起来是同一个。第二种方法如下:

each: function( callback, args ) {
  return jQuery.each( this, callback, args );
}

这种方法明显地称为更常见的方法,这意味着它同样合法。这种理解是正确的,还是我在这里遗漏了什么?

我通常信任这种方法,因为它不会导致我偏离选择器的标准做法。让我们面对现实吧,我们接受过培训:

$("p").each();

所以这似乎很自然:

$(obj).each();

我错了吗?

2 个答案:

答案 0 :(得分:12)

两者之间的差异实际上是指数级的,具体取决于您使用它的方式。

第一个$.each构成了一个启动迭代器的单个函数调用。

第二个$(foo.vals).each使三个函数调用启动迭代器。第一个是$(),它生成一个新的jQuery包装器集(不确定在此过程中有多少其他函数调用)。然后拨打$().each。最后,它使jQuery.each的内部调用启动迭代器。

在你的例子中,差异可以忽略不计。但是,在嵌套使用场景中,您可能会发现性能成为问题。

最后,jQuery Enlightenment中的Cody Lindley建议不要因为涉及的函数调用而使用$.each进行大于1000的迭代。使用正常的for( var i = 0...循环。

答案 1 :(得分:2)

我不确定其他人说的是什么......但我几乎完全使用你的第二种方法。

来自.NET的土地...它对我来说更有意义,让事情更容易阅读。