今天我非常喜欢使用Work和jQ。我得到了一个早上,但我无法解决它:(。 我的工作在这里:
<div class="container">
<p class="test">a</p>
<div>
<p class="test">a</p>
</div>
</div>
在正常情况下,我可以使用jQ与每个函数for
选择所有<p class="test">a</p>
EX:
$(".test").each(function() {
$(this).text('a');
});
但我听到大家都在说,for
函数的时间负荷比each
函数少。现在我想使用for
而不是each
..但我不知道在这种情况下如何编写代码jQ。
有人可以帮助我!三江源!
答案 0 :(得分:7)
除非你重复数百个,否则我不会担心它。
for
循环通常用于正常DOM(也就是没有jQuery)遍历,比如......
var elements = document.getElementById('something').getElementsByTagName('a');
var elementsLength = elements.length;
for (var i = 0; i < elementsLength; i++) {
elements[i].style.color = 'red';
}
elementsLength
的缓存是一个好主意,因此不会在每次迭代时计算。感谢CMS在评论中提出此建议。
如果你想用jQuery做的话,只需为你的jQuery对象调整它。
将elements
变量替换为您的jQuery集合,例如$('#something a')
。我想你可能需要重新编写对象,如果你需要用它做更多jQuery的东西。
答案 1 :(得分:5)
需要注意的一点是,在jQuery选择结果上使用序数访问器将返回本机DomElement。如果你想对它们使用jQuery方法,你必须重新包装它们:
var testElements = $('.test');
for (var i = 0; i < testElements.length; i++) {
// Using $() to re-wrap the element.
$(testElements[i]).text('a');
}
我是其他人所说的第二个。除非你处理许多元素,否则这是不成熟的优化。重新包装元素以使用.text()方法甚至可能使它无法获得任何收益。
答案 2 :(得分:1)
var nodes = $(".test");
for(var i = 0; i < nodes.length; i++)
{
var node = nodes[i];
}
答案 3 :(得分:1)
This article表明each()
在您进入数十万个循环项目之前没有明显的性能损失。
答案 4 :(得分:1)
另一种选择:
for (var i = 0; i < $('.test').length; i++){
var element = $('.test').eq(i);
}