如何在jquery中使用“For”而不是“each”函数

时间:2010-06-19 03:41:31

标签: javascript jquery iteration

今天我非常喜欢使用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。

有人可以帮助我!三江源!

5 个答案:

答案 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);
}