尽管有元素,为什么document.getElementsByName的长度为0?

时间:2014-11-14 15:02:37

标签: javascript html dom

脚本在加载document之前运行,那么为什么console.log(b)会在集合中显示元素?

如果console.log(b)包含元素,那么为什么console.log(b[0])会显示undefinedconsole.log(b.length) 0

<html> 
    <head> 
    
    <script>
        function test(){
            var b = document.getElementsByName('a');
            console.log(b);
            console.log(b[0]);
            console.log(b.length);
        }
        test();
    </script>
    </head>
    
    <body>
    <form id="a" name="a"></form>
    </body>
</html>

1 个答案:

答案 0 :(得分:1)

getElementsByName会返回NodeList。它是包含匹配节点列表的对象,因此b不为空。

但是,您在DOM准备好之前运行脚本,因此列表长度为0,没有第一个对象。您需要延迟脚本执行,直到解析了DOM之后,此时表单才会存在。