getElementsByClassName 奇怪的行为,跳过某些元素

getElementsByClassName strange behavior, skipping certain elements

我在使用 getElementsByClassName 时遇到一些非常奇怪的行为,我不确定是什么原因造成的。

如果我尝试将所有元素从 class B 交换到 class A,它只会交换某些元素,如下所示:

function swapClasses() {
    // Get all elements of class B
    const classBList = document.getElementsByClassName("classb");
    for (var i = 0; i < classBList.length; i++) {
        var classElem = classBList[i];
        // Swap its class from class B to class A
        classElem.className = "classa";
        // Swap the text as well
        classElem.textContent = "Class A";
    }
}
.classa {
    background-color: red;
}

.classb {
    background-color: green;
}
<div class="classa">Class A</div>
<div class="classb">Class B</div>
<div class="classb">Class B</div>
<div class="classb">Class B</div>
<div class="classb">Class B</div>
<button onclick="swapClasses();">Swap class B to class A</button>

我不知道为什么会这样,如果可能的话我很乐意修复它。

如有任何帮助,我们将不胜感激!

您可以使用 querySelectorAll 和 classList 而不是通过 getElementsByClassName 获得的实时节点列表

function swapClasses() {
  // Get all elements of class B
  [...document.querySelectorAll(".classb")].forEach(div => {
    div.classList.add("classa");
    div.classList.remove("classb");
    // Swap the text as well
    div.textContent = "Class A";
  })
}
.classa {
  background-color: red;
}

.classb {
  background-color: green;
}
<div class="classa">Class A</div>
<div class="classb">Class B</div>
<div class="classb">Class B</div>
<div class="classb">Class B</div>
<div class="classb">Class B</div>
<button onclick="swapClasses();">Swap class B to class A</button>