使用 getElementsByTagName 时为空数组

Empty array when using getElementsByTagName

如何循环使用 document.getElementsByTagName(); 检索到的元素;因为它的长度为 0 但仍然有元素。

下面是JS代码:

class HKPlayer
{
    constructor()
    {
        this.getPlayers();
        this.getPlayerAttributes();
    }
    getPlayers()
    {
        this.players = document.getElementsByTagName("HKPlayer");
    }
    getPlayerAttributes()
    {
        console.log(this.players);
    }
}
(function () {
    new HKPlayer();
})();

下面是html代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>HKPlayer Demo</title>
    <script src="dist/HKPlayer.js" type="text/javascript"></script>
</head>
<body>
    <HKPlayer type="video" theme="dark" src="assets/video/1.mp4"></HKPlayer>
    <br/>
    <HKPlayer type="video" theme="dark" src="assets/video/2.mp4"></HKPlayer>
</body>
</html>

输出如下:

我无法遍历 this.players,因为数组 this.players 数组为空。我该怎么做。

数组不为空,它有长度和两个项目,正如我在您所附图片上看到的那样,我认为您可以在 getPlayerAttributes 函数中访问 this.player.length 和 this.player[0]。 如果你

您在加载 DOM 之前执行您的 JS。

尝试包装这部分代码:

(function () {
    new HKPlayer();
})();

里面有:

document.onreadystatechange = function()
{
    if(document.readyState === 'complete')
    {
        // Put your code that relies on a complete/ready DOM here.
    }
}

编辑:作为对评论的回应,不,这不是 100% 跨浏览器,也不会总是 工作。如果您希望获得尽可能多的浏览器支持,您很可能希望使用以下方法:

document.addEventListener('DOMContentLoaded', fn, false);

回退到:

window.addEventListener('load', fn, false )

或旧版本的 IE:

document.attachEvent("onreadystatechange", fn);

回退到:

window.attachEvent("onload", fn);

这显然是 jQuery 处理其 $(document).ready() 的方式。可在 here.

中找到有关此的更多信息