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新增方法先将类数组对象变为数组,再进行数组遍历(代码可参考以下);
-------以上内容尽为个人观点,如有不对欢迎指正