迭代jQuery对象的最有效方法是什么?

时间:2013-02-20 13:13:43

标签: jquery performance for-loop

我在jsperf上创建了一个简单示例,以帮助解释我的问题。在jsperf的示例中,在链接上设置了style属性(我知道这可以在没有循环的情况下完成)。

迭代jQuery对象的最有效方法是什么?

根据jsperf结果,.each表现相当不错,但也不是最快的。也许有一个更好的解决方案,我不知道。

1.例如.each:

$('body').find('div.iojo-test-container a').each(function() {
  $(this).css('color', 'red');
});

2.使用for循环示例(略快于.each):

var $a = $('body').find('div.iojo-test-container a');
for (var i = $a.length; --i;) {
  $($a[i]).css('color', 'red');
}

3.设置风格的最快方式,但请忽略此案例。这是关于迭代而不是设置CSS样式。

$('body').find('div.iojo-test-container a').css('color', 'red');

2 个答案:

答案 0 :(得分:3)

我的拙见

在部署之后进行优化是一回事,可能只是想微调,但除非你需要进行优化,否则不要担心。 .each()工作正常,同时还具有可读性的附加好处。 (显然你在调用.each时迭代一个集合)。并非for循环不那么简洁,但除非您的加载时间或性能受到巨大打击,否则不要在游戏的这个阶段担心它。

如果速度真的是一个问题,jQuery是一个可以说是臃肿的库。像$(this).attr()这样的调用直接访问this.attr可以在不牺牲可读性的情况下增加好处(并且避免加载jQuery包装器来设置属性)。但是,您已选择使用该库,因此请继续使用它。

答案 1 :(得分:-1)

$('div.iojo-test-container a').css('color', 'red');

jquery会自行迭代所有.iojo-test-container a并将它们设置为你的css属性