javascript - 为什么以及何时 for 循环忽略 html 集合中的某些项目

标签 javascript for-loop

我附上了一个codepen示例:http://codepen.io/anon/pen/zpmjJ

我只是尝试使用经典循环更改 html 集合数组的类名,经过多次测试后我无法弄清楚出了什么问题,如果我犯了一个常见错误,我总是忽略一项。

<div class="test">1</div>
<div class="test">2</div>
<div class="test">3</div>

bout.addEventListener("click",function(){

   var newtest = document.getElementsByClassName('test');
     for (i=0; i < newtest.length; i++)
     {
         newtest[i].className="bob";
     }

 });

最佳答案

这里的问题是您正在使用 document.getElementsByClassName ,它会给您一个 live NodeList 。您应该使用 document.querySelectorAll('.test') 来代替。

var newtest = document.querySelectorAll('.test');
for (var i=0; i < newtest.length; i++) {
    newtest[i].className = "bob";
}

对于实时 NodeList 集合 newtest 是对动态更新的元素集合的引用(由 className test 索引)。因此,在第一次循环迭代之后,当您用 bob 覆盖 className 时,整个集合会变小一(因为 newtest[0] 不再具有类 test >)。它使指数发生变化。

您的代码还有一个问题:不要忘记 var 关键字。

演示:http://codepen.io/anon/pen/BAFyb

关于javascript - 为什么以及何时 for 循环忽略 html 集合中的某些项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26479289/

相关文章:

javascript - Nordic JavaScript 编码问题

javascript - 减少将函数添加到函数队列的样板

c# - 将 xml 嵌入 json

javascript - 如何使用 jQuery 检测任何表单输入字段的变化?

matlab - Matlab : function handle in cell array with undefined operators

java - 如何只循环一次组合?

javascript - jQuery 事件处理程序闭包与上下文

bash - 如果没有扩展名为 .c 的文件,则 for 循环包括通配符 (*.c)。我怎么走?

java - for each 里面一个 for each - Java

c - 我怎样才能得到 '*'梯子?