【问题标题】:$.each([collection]) vs $([collection]).each()$.each([collection]) 与 $([collection]).each()
【发布时间】:2011-01-20 06:16:00
【问题描述】:

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();

我错了吗?

【问题讨论】:

  • 我看不出问题出在哪里。 $(o).each() 致电 jQuery.each(this, callback, args)。你还需要什么确认/说服力?
  • @voyager:我只是想确定我没有弄错。我想像这样的项目可能会引起其他 jQuery 开发人员的兴趣,有人可能会添加一些区别。
  • 很公平。似乎差异更多的是样式问题而不是功能问题。当然,现在您可以将不信服的用户指向某个地方。
  • @voyager:也许您应该将这一点带入答案;)

标签: jquery json iteration


【解决方案1】:

我不确定其他人怎么说……但我几乎只使用你的第二种方法。

来自 .NET 领域……它对我来说更有意义,也更容易阅读。

【讨论】:

    【解决方案2】:

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

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

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

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

    最后,由于涉及函数调用,jQuery Enlightenment 中的 Cody Lindley 不建议将 $.each 用于大于 1000 的迭代。使用普通的for( var i = 0... 循环。

    【讨论】:

    • +1 极好的信息。我特别高兴听到 CL 在这个主题上的立场,因为我最近在另一个问题中建议 for(;;) 作为 $.each() 的替代品。知道 CL 可能会同意我,这让我觉得很聪明;)
    • $.wach 允许您遍历任何集合而 $().each 仅适用于 jquery 元素的原因是什么?
    猜你喜欢
    • 2021-08-10
    • 2022-01-21
    • 2015-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-22
    相关资源
    最近更新 更多