]
nodeList를 다음으로 변환합니다. 배열에는 문제가 없습니다!
코드는 다음과 같습니다.
window.onload = function(){
var d = document.createDocumentFragment();
var div = document.getElementById("aaa");
var c = div.childNodes;
var arr =
for( var i= 0,n=c.length;iarr.push(c[i])
}
for(var i=0,n=arr.length; ialert(arr[i] " " i)
d.appendChild(arr[i])
}
div.parentNode.replaceChild(d,div)
}
외부 J를 도입해야 하는 경우 실행하려면 새로 고쳐야 합니다.
]
분명히 nodeList에는 배열에 없는 기능이 있습니다. 실행 상자 2에서 노드를 문서 조각에 추가하면 실제로 DOM 트리에서 분리된다는 것을 알 수 있습니다. nodeList는 이 변경 사항을 추적하고 동적으로 자체 변경해야 하며 선형 증분은 올바른 인덱스에 해당할 수 없습니다. 마디! 그래서 우리는 매번 firstChild를 얻습니다.
코드 복사
코드는 다음과 같습니다.
window.onload = function(){
var d = document.createDocumentFragment();
var div = document.getElementById("aaa");
var c = div.childNodes;
while(c.length) d.appendChild(c [0] )//비워질 때까지 매번 첫 번째 노드만 가져옵니다.
div.parentNode.replaceChild(d,div)
}
[Ctrl A 모두 선택 참고: 외부 J를 도입해야 하는 경우 실행하려면 새로 고쳐야 합니다 ]
顺便一提,由getElementsByTagName取得的HTMLCollection也是这个样子,因此处理这类节点集合要打起十二分精神了!
这两种节点集合在各浏览器还实现得不太一样,如标准浏览器我们可以用Array.prototype.slice.call将它们转换为原生数组,IE则报错。标准浏览器的它们有hasOwnProperty与valueOf,而IE是没有的……