如何将使用 getElementsByClassName 时返回的 HTMLcollection 转换为数组 [duplicate]

How to convert HTMLcollection returned when using getElementsByClassName into Array [duplicate]

提问人:Shnayder 提问时间:9/15/2023 最后编辑:DavidShnayder 更新时间:9/15/2023 访问量:32

问:

Array.from() 或 Array.prototype.slice.call() 或使用 for 循环将 htmlcollection 添加到数组中,无法将 HTMLcollection 从 getElementsByClassName 转换为数组,以便我可以遍历数据。注意:不想使用 querySelectorAll 会导致内容是动态添加的,因此 querySelectorAll 不会获取元素。考虑代码:下面

document.addEventListener('DOMContentLoaded', function () {

    const convochats = document.getElementsByClassName('onechat');
    console.log(convochats); //This return a HTMLcollection of elements with onechat class

    // case 01:
    let convochatsArray_case01 = [];
    for (let i = 0; i < convochats.length; i++) {
        convochatsArray.push(convochats[i])
        console.log(convochatsArray_case01); //This return empty array
    }

    // case 02
    let convochatsArray_case02 = Array.from(convochats);
    console.log(convochatsArray_case02); //This return empty array

    // case 03
    let convochatsArray_case03 = Array.prototype.slice.call(convochats);
    console.log(convochatsArray_case03); //This return empty array
})

我试图将HTMLcollection转换为数组,以便我可以遍历它们

JavaScript 数组 DOM HTMLCOLLECTION

评论

0赞 David 9/15/2023
在哪里定义?请将其更新为可运行的最小可重现示例,该示例演示了该问题。convochatsArray

答:

1赞 Quentin 9/15/2023 #1

由于不能使用 querySelectorAll 的原因,无法有效地将 getElementsByClassName 的返回值转换为数组。

在您尝试创建数组时,这些元素不存在。该阵列也未处于活动状态。

您需要在元素存在时创建数组。