奇怪的for循环行为
Strange for loop behavior
下面的代码没有从节点列表中删除每个节点的"class"属性。我错过什么了吗?
HTML
<button class="choice"></button>
<button class="choice"></button>
<button class="choice"></button>
<button onclick="removeAttr()">REMOVE ATTRIBUTES</button>
Javascript
function removeAttr() {
var i, buttons = document.getElementsByClassName('choice');
for (i = 0; i < buttons.length; i++) {
buttons[i].removeAttribute('class');
}
}
然而,几次点击后,你会得到你想要的结果,但我不明白为什么…
.getElementsByClassName()
返回一个活动的NodeList。这意味着当您删除类时,这些元素将不再在NodeList中。
你可以通过向后循环来解决这个问题。
function removeAttr() {
var i, l, buttons = document.getElementsByClassName('choice');
for (i = 0, l = buttons.length - 1; i >= 0; --i) {
buttons[i].removeAttribute('class');
}
}
或者你可以使用while循环。
function removeAttr() {
var buttons = document.getElementsByClassName('choice');
while(buttons.length) buttons[0].removeAttribute('class');
}
或者您可以使用返回静态NodeList的选择方法,如.querySelectorAll()
function removeAttr() {
var i, buttons = document.querySelectorAll('.choice');
for (var i in Object.keys(buttons)) {
buttons[i].removeAttribute('class');
}
}
相关文章:
- 为什么JavaScript在for循环为3时向所有4发出警报
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- 我的javascript for循环不起作用
- For循环冻结Javascript
- 如何在for循环中添加事件侦听器
- 双“for”循环(循环)
- javascript for循环不起作用
- for循环中的javascript if语句找不到==
- Javascript在for循环中等待处理请求
- 我没有'I don’我不理解for在循环中的用途
- 为什么在 Javascript 中使用空的 for 循环 - for(;;).
- 错误后如何停止循环“FOR”
- 如何使用循环 for 与 java 脚本一起检查输入中的值
- 如何正确使用ngRepeat,同时使用循环for
- 是否可以使用循环(for/while)来制作动画?
- 在循环for循环时如何进入和退出
- Javascript原型循环for in数组
- 在对象数组中循环for
- Javascript循环:for循环工作,但不能映射
- 如何创建一个循环"for"在json