如何在不清空 HTMLCollection 的情况下将其转换为数组?

Posted

技术标签:

【中文标题】如何在不清空 HTMLCollection 的情况下将其转换为数组?【英文标题】:How do I convert a HTMLCollection into an array, without emptying it? 【发布时间】:2018-06-17 15:34:05 【问题描述】:

我正在尝试将 4 个 div 的 htmlCollection 转换为一个数组,但我尝试的每个方法似乎都会导致数组被清空。

<div class="container">
        <div class="shape" id="one"></div>
        <div class="shape" id="two"></div>
        <div class="shape" id="three"></div>
        <div class="shape" id="four"></div>
</div>

我尝试过的方法 - 根据this previous question:

var shapesHC = document.getElementsByClassName('shape');
//gives HTMLCollection

var shapesArrCall = [].slice.call(shapesHC);
// returns empty array

var shapesArrHC = Array.from(shapesHC);
// returns empty array

var shapesArrHCSpread = [...shapesHC];
// returns empty array

如果有人能指出我在哪里出错,我将不胜感激。

谢谢。

【问题讨论】:

这三个方法在我测试时都返回一个非空数组。也许您的问题出在代码的其他地方? 感谢您的快速响应 - 这是我的全部代码。就是一个html文件和一个js文件。 代码中的 javascript 位于 HTML 的上方还是下方?如果它在您的 HTML 之上(在头部),则这些元素在您的 JavaScript 运行 之后 之前不存在以供查询。 阅读这个问题,看看它是否适用:***.com/a/24070373/691711 是的,我的脚本标签在头部。现在我已经把它移到了身体的末端,它工作得很好。 面部护理 【参考方案1】:

试试这个:

setTimeout(() => 
    this.convertToArray();
);

convertToArray() 
    const shapesHC = document.getElementsByClassName('shape');
    const shapesArrHCSpread = [...(shapesHC as any)];
    console.log(shapesArrHCSpread);

【讨论】:

以上是关于如何在不清空 HTMLCollection 的情况下将其转换为数组?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不删除sql server表中数据的情况下,让自增的id列从1开始

如何清空一个字符数组?

如何让 PhpMyAdmin 在不要求确认的情况下删除/截断

如何显式清空频道?

如何在不刷新页面的情况下从数据库中的textarea添加数据[重复]

如何在不删除数据库的情况下删除 phpMyAdmin 中数据库中所有表的内容?