【问题标题】:jQuery Each() as a For statement?jQuery Each() 作为 For 语句?
【发布时间】:2011-10-26 18:33:47
【问题描述】:

我有一个 jQuery.each() 函数,我想将其转换为 FOR 语句。

我在想怎么转

     jQuery('.myclass').each(function() {
       //do stuff
     }

变成一个

   for ( var i=0; i<.myclass.length; i++) {
    //do stuff
   }

?

【问题讨论】:

  • 为什么?结果实际上是相同的。
  • @Juhana: each 涉及重复的函数调用和与this 的值混淆。很多时候,一个好的老式循环是更好的选择。有时each 是更好的选择。
  • @Juhuna - 我认为您还需要查看此jsperf.com/jquery-each-vs-for-loop/6 - 会改变您的看法

标签: jquery for-loop each


【解决方案1】:

您可以使用.get() 来获取标准的JavaScript 数组。然后以正常方式使用 for 循环。

var nodes = $(...).get(),
    nodes_len = nodes.length;

for(var i=0; i < nodes_len; i++) {
   var node = nodes[i];

   ...
}

或者,如果您只需要索引号,请使用以下内容:

$(...).each(function (index) {
   ... 
});

【讨论】:

  • 是的,我也会提到索引选项 +1。
  • 无需先致电get()
【解决方案2】:

jQuery 对象是类似数组的。它们有一个length 属性,并且它们支持通过使用带有[] 的数字索引来访问元素。所以你只需直接索引到结果对象:

var myclass = jQuery('.myclass');

for ( var i=0; i<myclass.length; i++) {
    // use myclass[i] here
}

API 文档中并未特别标记此信息,但您可以在 get function 的文档中找到它。括号表示法在很大程度上取代了get 函数的使用,除了它处理负索引值(用于相对于集合末尾进行索引;负索引仅通过get 支持,而不通过[] 支持) .

【讨论】:

  • 非常感谢 :) 审查了这一点,有点 :O - jsperf.com/jquery-each-vs-for-loop/6
  • @ssDille:请注意,您的 for..in 测试用例所做的事情与标准 for 循环完全不同。详情:Myths and realities of for..in
  • @TJ - 感谢您的链接。是的 - 但一般我的理解是 for 循环比 .each() 快?
  • @ssDille: "...但通常...for 循环比.each() 快?" 戏剧性地,是的。当然,可能有 99.99%+ 的时间你不在乎,因为你只循环了几个元素,所以虽然存在绝对差异,但没有 可感知 差异。我不会挂断它,直到/除非你看到一个实际的问题(一定要在 IE 上测试;它很慢,因此有利于发现性能问题)。 for 有你必须管理索引的问题; eachthis 问题和潜在的速度成本。每个(没有双关语)都有它的位置。 :-)
猜你喜欢
  • 2015-09-05
  • 1970-01-01
  • 2011-01-29
  • 2016-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-12
相关资源
最近更新 更多