This question already has answers here:
For loop for HTMLCollection elements

(13个回答)


1年前关闭。




我正在尝试使用forEach遍历从getElementsByTagName("input")继承的所有元素。有什么想法为什么在FF,Chrome或IE中不起作用?
<html>
    <head>
    </head>
    <body>
        <input type="text" value="" />
        <input type="text" value="" />
        <script>
            function ShowResults(value, index, ar) {
                alert(index);
            }
            var input = document.getElementsByTagName("input");
            alert(input.length);
            input.forEach(ShowResults);
    </script>
    </body>
</html>

最佳答案

您需要使用以下命令将节点列表转换为数组:

<html>
    <head>
    </head>
    <body>
        <input type="text" value="" />
        <input type="text" value="" />
        <script>
            function ShowResults(value, index, ar) {
                alert(index);
            }
            var input = document.getElementsByTagName("input");
            var inputList = Array.prototype.slice.call(input);
            alert(inputList.length);
            inputList.forEach(ShowResults);
    </script>
    </body>
</html>
或用于循环。
for(let i = 0;i < input.length; i++)
{
    ShowResults(input[i].value);
}
并将ShowResults函数更改为:
function ShowResults(value) {
   alert(value);
}
为什么我们需要这样做?
JavaScript中的某些对象看起来像数组,但不是一个。这通常意味着它们具有索引访问权限和length属性,但是没有数组方法。示例包括特殊的变量参数,DOM节点列表和字符串。类似于数组的对象和通用方法提供了处理类似数组的对象的技巧。
source
更新于07.10.2019
如今,使用ES6可以使用[...inputList].forEachArray.from(inputList)

关于javascript - 如何遍历从getElementsByTagName返回的所有元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19324700/

10-09 18:45