NodeList
NodeList
개술
NodeList
대상은 하나의 노드의 집합으로 Node.childNodes
and thequerySelectorAll에서 되돌아온다.
등록 정보
length
NodeList
에 포함된 노드 개수.메서드
item ( idx )
null
.약자nodeList[idx].
묘사
라이브 모음
대부분의 경우
NodeList
대상은 라이브 집합이다.문서의 노드 트리가 변경되면 이미 존재하는 NodeList 객체도 변경될 수 있다는 뜻이다.var links = document.getElementsByTagName('a');// links.length === 2.document.body.appendChild( links[0].cloneNode(true) ); // a.// links NodeList .// links.length === 3
그러나 이
NodeList
의 대상이 document.querySelectorAll
(또는 Element.querySelectorAll
) 방법으로 되돌아온다면 이것은 비라이브(페이지 내의 모든 노드를 비워도 links.length
는 2)이다.맵과 forEach 방법이 없는 NodeList 객체는 무엇입니까?
NodeList
대상은 어떤 면에서 수조와 매우 비슷하여 Array.prototype
에서 계승하는 방법을 직접 사용할 수 있을 것 같다.그러나, 이것은 안 된다.JavaScript의 상속 메커니즘은 원형에 기반을 두고 있다.수조원소가 일부 수조원법(예를 들어
forEach
과 map
이 있는 이유는 원형 체인에 다음과 같은 방법이 있기 때문이다.myArray --> Array.prototype --> Object.prototype --> null ( , Object.getPrototypeOf, ).
forEach
,map
이런 방식은 사실Array.prototype
이라는 대상의 방법이다.수조와 달리
NodeList
의 원형 체인은 다음과 같다.myNodeList --> NodeList.prototype --> Object.prototype --> null
NodeList.prototype
방법은 하나item
뿐이고 Array.prototype
상의 방법은 없기 때문에 NodeList
대상은 그것들을 사용할 수 없다.해결책
하나의 해결 방법은
Array.prototype
에 있는 방법을 NodeList.prototype
에 추가하는 것이다.그러나 DOM 대상의 원형을 확장하는 것은 매우 위험하다. 특히 구 버전의 인터넷 Explorer(6,7,8)에서for(prop in Array.prototype){
if(Array.prototype.hasOwnProperty(prop) && typeof(Array.prototype[prop]) === 'function')
NodeList[prop] = Array.prototype[prop];}var links = document.getElementsByTagName('a');links.forEach(function(link){ // link.style.color = '#0F0';});
DOM 객체의 원형을 확장하지 않는 해결 방법:
var forEach = Array.prototype.forEach;var links = document.getElementsByTagName('a');forEach.call(links, function(link){ // link.style.color = '#0F0';});
예.
NodeList
객체의 모든 노드를 반복하는 데 사용할 수 있는 코드는 다음과 같습니다.for (var i = 0; i < myNodeList.length; ++i) {
var item = myNodeList[i]; // myNodeList[i].}
for...in
나 for each...in
를 사용해서 NodeList
대상의 요소를 훑어보지 마세요. NodeList
대상의length와item 속성도 범람하기 때문에 스크립트가 잘못 실행될 수 있습니다. 만약에 상기 두 개의 속성도 DOM 대상으로 간주한다면.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.