javascript - JavaScript 中的 For 循环缺少值

标签 javascript html arrays loops

我是 javascript 新手,正在学习数组和循环。我正在编写一些基本代码来更改某些段落的类,但我无法这样做。 谁能告诉我我做错了什么?

function change() {
  var x = document.getElementsByClassName('a');
  x[0].className = 'b';
  for (var y = 0; y < x.length; y++) {
    console.log(x[y]);
    x[y].className = "b";
  }
}
p.a {
  font-size: 2em;
  color: red;
  text-align: center;
}

p.b {
  font-size: 1em;
  color: green;
  text-align: center;
}
<p class='a'>a</p>
<p class='a'> b</p>
<p class='a'>c</p>
<p class='a'>a</p>
<p class='a'>b</p>
<p class='a'>c</p>
<p class='a'>a</p>
<p class='a'>b</p>
<p class='a'>c</p>

<button onclick="change()">Change</button>

事实证明,有些段落正在更改,有些则没有,谁能告诉我我做错了什么吗?

最佳答案

document.getElementsByClassName() 是一个实时集合,这意味着当您循环遍历元素并更改类时,您正在更改集合。在迭代集合时更改集合的成员资格几乎总是一个坏主意。这会使您的索引指向错误的元素。最简单的解决方案是使用 querySelectorAll() 代替。

function change() {
  var x = document.querySelectorAll('.a');
  for (var y = 0; y < x.length; y++) {
    x[y].className = "b";
  }
}
p.a {
  font-size: 2em;
  color: red;
  text-align: center;
}

p.b {
  font-size: 1em;
  color: green;
  text-align: center;
}
<p class='a'>a</p>
<p class='a'> b</p>
<p class='a'>c</p>
<p class='a'>a</p>
<p class='a'>b</p>
<p class='a'>c</p>
<p class='a'>a</p>
<p class='a'>b</p>
<p class='a'>c</p>

<button onclick="change()">Change</button>

关于javascript - JavaScript 中的 For 循环缺少值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58574647/

相关文章:

javascript - Array.prototype.slice.call 在 getElementsByClassName 的重新创建中如何工作?

javascript - babel-cli 不适用于最新的预设

javascript - 当它有一个特定的类时,项目不会追加

php - Paypal IPN POST 变量随机返回 item_number 或 item_number1

javascript - Angular 重复图像

ios - enumerated() 常数时间 O(1) 是如何实现的?

javascript - 使用扩展运算符使用 react 钩子(Hook)更新映射函数内的状态

javascript - 如何在 IE Windows Mobile 5 中向 <SELECT> 添加选项

arrays - 数组 VBA 中的用户定义对象

JavaScript 多维数组