控制台输出:
由于IE8-浏览器将NodeList实现为一个DOM对象,不能使用Array.prototype.slice()方法,必须手动枚举所有成员
<div></div> <script> var childN = test.childNodes; console.log(childN instanceof Array);//false function convertToArray(nodes){ var array = null; try{ array = Array.prototype.slice.call(nodes) }catch(ex){ array = []; var len = nodes.length; for(var i = 0; i < len; i++){ array.push(nodes[i]); } } return array; } var childNew = convertToArray(childN); console.log(childNew instanceof Array);//true </script>在实际运用中,涉及用动态集合循环的时候要注意,由于他的集合是动态的,所以他的长度是随之变化的饿,易造成死循环。
let HtmlCollection = document.getElementsByTagName('p') console.log(HtmlCollection) for(var i =0;i<HtmlCollection.length;i++){ document.getElementById('nodes').appendChild(document.createElement('p')) //DOM发生改变 console.log(HtmlCollection.length) }控制台输出:
解决办法把他的长度定义出来,再使用: let HtmlCollection = document.getElementsByTagName('p') console.log(HtmlCollection) var length = HtmlCollection.length for(var i =0;i<length;i++){ document.getElementById('nodes').appendChild(document.createElement('p')) //DOM发生改变 console.log(length) console.log(HtmlCollection.length) }
控制台: