getElementsByTagName得到的数组,长度和内容不符

getElementsByTagName得到的数组,长度和内容不符

 <div id="a">
            <p id="s1">woaijava</p>
        </div>
        <button onclick="judge()">你好</button>
        <script>
            function judge(){
                var a = document.getElementsByTagName("p");
                for(var idex in a){
                    console.log(a[idex].textContent);
                }
            }
        </script>

按照理想应该输出一个woaijava,但是输出结果却不是一个,控制台输出数组长度是1,但是输出元素却不是却是两个woaijava和三个undefined

我不是很确定,但是我猜测可能是浏览器解析不规范的hrml的时候,会添加p标记。比如div外面,body里面。你用f12看下

document.getElementsByTagName("p")
不是特殊的数组,HTMLCollection对象,还有item ,namedItem ,length 3过 属性。for 。。in变量的是属性,不单是数组项。你要遍历数组项不要for。。in


for(var i=0;i<p.length;i++) console.log(a[i].textContent);

输出2个woaijavay应该和caozhy说的一样,标签不闭合什么的导致解析出错生成了2个p什么的。就你发的这个代码肯定没有问题

http://www.cnblogs.com/zzq919101/p/6018231.html

打印出这样的结果是因为你通过document.getElementsByTagName('p')获取的不是一个数组,二是一个类数组对象,
图片说明
图片说明
你可以通过ES6新增方法先将类数组对象变为数组,再进行数组遍历(代码可参考以下);
图片说明
图片说明

                                    -------以上内容尽为个人观点,如有不对欢迎指正