gpt4 book ai didi

JavaScript HtmlCollection 循环永远不会返回第二个元素

转载 作者:行者123 更新时间:2023-12-02 16:08:13 26 4
gpt4 key购买 nike

我知道有关于如何访问和迭代 HtmlCollection 的答案,但它在这里对我不起作用:
我得到了一些类为“tabSheetActive”的元素,这些元素的数量可以是 1 或更多。
我通过以下方式访问它们:

var activeTabSheets = document.getElementsByClassName('tabSheetActive');
console.log('Active sheets amount: ' + activeTabSheets.length); // outputs 2

记录集合输出以下内容:

[div.tabSheetActive.sheet_512_0, div.tabSheetActive.sheet_512_0]

之后,我尝试迭代它们并像这样操作它们的类:

for (var i = 0; i < activeTabSheets.length; i++) { // just iterates one time
var activeTabSheet = activeTabSheets[i];
console.log("Index: " + i); // outputs 0
console.log(activeTabSheet); // outputs first element
var newClassName = activeTabSheet.className.replace('tabSheetActive', 'tabSheet');
activeTabSheet.className = newClassName;
}

[].forEach.call(activeTabSheets, function(activeTabSheet) {//code here }); 的技巧对我来说也不起作用。它只迭代一次。
这肯定是一些非常愚蠢的事情,但我已经调试了好几个小时并为此抓狂了。

最佳答案

getElementsByClassName 返回一个实时 HTMLCollection。

这一行:

activeTabSheet.className.replace('tabSheetActive', 'tabSheet');

阻止列表中的第一项成为类的成员。因此,它被删除,其他所有内容都被向下洗牌(因此索引 1 处的元素移动到索引 0)。

<小时/>

要解决这个问题,您可以:

  • 使用 querySelectorAll 返回非事件 NodeList
  • 向后循环 HTMLCollection
  • 使用 while 循环,测试 HTMLCollection 的长度,并始终修改索引 0
  • 在循环之前将所有值复制到数组中

关于JavaScript HtmlCollection 循环永远不会返回第二个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30506113/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com