我在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');
答案 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属性