For 循环在每次迭代后跳过一次
For loop skips one after every other iteration
我有一个具有类"black"的HTML元素列表(还有其他一些类)。我想将"黑色"转换为"白色"。我编写了以下代码。
var blacks = document.getElementsByClassName("black");
for (i = 0; i < blacks.length; i++)
blacks[i].className = blacks[i].className.replace('black', 'white');
有趣的是,一个元素变为白色,一个元素被跳过,直到元素结束。也就是说,偶数顺序的元素保持不变。我缺少什么来转换所有黑人?
document.getElementsByClassName
返回一个实时NodeList
,当您对它所表示的 DOM 部分进行更改时,该会自动更新。您将其视为静态列表。您可以通过将其转换为数组来做到这一点:
var blacks = [].slice.call(document.getElementsByClassName("black"));
我突然想到,你也可以:
var blacks = document.querySelectorAll(".black"); //NodeList but static
除了关于blacks
是一个活nodeList的评论之外,你可以通过简单地减少循环来避免转换为数组:
var blacks = document.getElementsByClassName("black");
for (var i = blacks.length -1 ; i >= 0; --i) {
blacks[i].className = blacks[i].className.replace('black', 'white');
}
JS小提琴演示。
相关文章:
- Javascript返回值只在循环中返回一次
- For循环在Jquery中只运行一次
- 可能只在for循环内部运行一次代码块
- mongoose.js Model.remove在循环中只能工作一次
- 循环遍历数组并仅获取一次相同的值
- Jquery 循环一次或在数据数组中显示一次数据
- 一次循环遍历一组
- 如何在if循环中只执行一次
- AJAX在数组循环中调用,只在上一次完成后调用next
- 正在加载“"循环,每3秒更改一次文本
- 我怎么能有一个实时计时器,在3秒的循环内每秒钟更新一次
- 在Javascript中每五秒钟循环一次
- 如何一次运行一次循环javascript
- 使用胡须.js一次循环访问一个测验项目
- 递归 JS 函数每秒错过一次循环
- 使用 javascript 一次循环播放 4 个以上的声音
- 为什么我的循环只有一次循环,即使有3个项目
- 在下一次循环迭代之前等待promise结果
- Jquery 一次循环和绑定 10 条记录
- JavaScript在同一循环中每x次迭代一次循环