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

Rue*_*eta 4 javascript iteration jquery

今天我非常喜欢使用Work和jQ.我得到了一个早上,但我无法解决它:(.我的工作在这里:

<div class="container">
    <p class="test">a</p>
    <div>
        <p class="test">a</p>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

在正常情况下,我可以使用jQ与每个功能for选择所有<p class="test">a</p>EX:

$(".test").each(function() {
    $(this).text('a');
});
Run Code Online (Sandbox Code Playgroud)

但是我听到每个人都在谈论这个问题,for函数比each函数获得更少的时间.现在我想使用for而不是each..但我不知道在这种情况下如何编写代码jQ.

有人可以帮帮我!谢谢!

ale*_*lex 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';
}
Run Code Online (Sandbox Code Playgroud)

缓存elementsLength是一个好主意,因此不会每次迭代计算.感谢CMS在评论中提出这一建议.

如果你想用jQuery做这个,那就适应你的jQuery对象.

elements用你的jQuery集合替换变量,比如$('#something a').我想你可能需要重新包装对象,如果你需要用它做更多jQuery的东西.

  • 他的代码是正确的.您可以使用任何DOM元素作为上下文来下载getElementsByTagName或getElementsByClassName. (2认同)

Dav*_*ard 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');
}
Run Code Online (Sandbox Code Playgroud)

我是其他人所说的第二个.除非你处理许多元素,否则这是不成熟的优化.重新包装元素以使用.text()方法甚至可能使它恢复无益.

  • 重新包装是循环中的`$(元素)`步骤.如果您仍然希望能够在每个元素上使用jQuery的方法,那么这是必要的,但是每次迭代都会产生性能成本(因为jQuery构造了一个新的jQuery对象来包装具有扩展功能的元素). (2认同)