NodeList가 어떤 객체인지 알 수 있습니다. 배열과 같은 객체이고 괄호 표기법을 통해 액세스 할 수 있다고 읽었습니다 (예 : var a = someNode.childNode[0];
). 우리가 객체의 속성에만 접근 할 수 있고, 우리가 가질 수 없다는 것을 알고 있기 때문에 어떻게 가능합니까?javascript의 NodeList 객체
답변
NodeLists는 "live"입니다. 즉, 문서 구조가 변경 될 때 업데이트됩니다. 그들은 가장 정확한 정보를 항상 최신 상태로 유지합니다. 실제로 모든 NodeList 객체는 액세스 할 때마다 DOM에 대해 실행되는 쿼리입니다.
는 NodeList를을 반복 할 때마다, 그 변수에 반복자를 비교 한 후 길이가 두 번째 변수를 초기화하는 것이 가장 좋습니다 :
var divs = document.getElementsByTagName("div");
for (var i=0, lens=divs.length; i < len; i++){
var div = document.createElement("div");
document.body.appendChild(div);
}
NodeList의이 같은 구조 배열이지만 실제로는 아니다 배열. 대괄호 표기법을 사용하여 배열 값에 액세스 할 수 있습니다.
NodeList는 핵심 Javascript 객체가 아니며 브라우저와 DOM을 통해 제공됩니다. 동적 또는 라이브 객체에 대한 인터페이스를 반환하는 함수를 생각해보십시오. forEach()는 사용할 수 없지만이를 실제 배열로 변환하여 예를 들어 다음과 같은 스냅 샷을 만들 수 있습니다.
// turns nodelist into an array to enable forEach
function toArray(list) {
var i, array = [];
for (i=0; i<list.length;i++) {array[i] = list[i];}
return array;
}
세부 사항 : http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-536297177
NodeList
가 호스트 객체이며, 기본 자바 스크립트 객체에 적용되는 일반적인 규칙이 적용되지 않습니다. 따라서 length
속성과 대괄호 속성 액세스 구문을 통한 해당 멤버에 대한 액세스로 구성된 문서화 된 API를 고수해야합니다. 당신은 노드 목록의 구성원의 스냅 샷을 포함하는 Array
만들려면이 API를 사용할 수 있습니다
var nodeList = document.getElementsByTagName("div");
var nodeArray = [];
for (var i = 0; i < nodeList.length; ++i) {
nodeArray[i] = nodeList[i];
}
자바 스크립트 알코올처럼, 그것은 강요 할 수
var links = document.getElementsByTagName('a');
Array.prototype.slice.call(links).forEach(function(anchor, index, arr) {
anchor.addEventListener('click', onClickFN, false);
});
NodeList
이 DOM elements
의 모음입니다. 그것은 배열과 같습니다 (그러나 그렇지 않습니다). 이를 사용하려면 일반 JavaScript 배열로 변환해야합니다. 다음 스 니펫을 통해 작업을 완료 할 수 있습니다.
const nodeList = document.getElementsByClassName('.yourClass'),
nodeArray = [].slice.call(nodeList);
노드 목록은 종종 필터가있는 노드 반복자로 구현됩니다. 즉 길이가 같은 속성을 얻는 것은 O(n)이며 길이를 다시 확인하여 목록을 반복하는 것은 O (n^2)가됩니다.
var paragraphs = document.getElementsByTagName('p');
for (var i = 0; i < paragraphs.length; i++) {
doSomething(paragraphs[i]);
}
대신이 작업을 수행하는 것이 좋습니다 :이
var paragraphs = document.getElementsByTagName('p');
for (var i = 0, paragraph; paragraph = paragraphs[i]; i++) {
doSomething(paragraph);
}
이 한 배열이 부울 거짓으로 취급하는 일을 포함하지 않는 모든 컬렉션과 배열에 적합합니다.
childNodes를 반복하는 경우 firstChild 및 nextSibling 속성을 사용할 수도 있습니다.
var parentNode = document.getElementById('foo');
for (var child = parentNode.firstChild; child; child = child.nextSibling) {
doSomething(child);
}
이제 ES2015에서 당신은 어떤 배열과 같은 객체 배열 인스턴스를 생성 Array.from
방법을 사용할 수있다, 그래서 이것은 작동합니다 :
const divList = Array.from(document.getElementsByTagName("div"));
자세한 내용은 다음 https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/from
나를 위해 잘됐다. 2016 년 10 월 Chrome –
- 1. 왜 명명 : NodeList 대 childNodes입니까
- 2. "객체"를 JavaScript의 함수로 변환하는 방법은 무엇입니까?
- 3. NodeList 및 DocumentBuilder를 사용하여 XML 구문 분석
- 4. NodeList 및 NodeMaps에 대한 Noob 질문
- 5. javascript의 객체 변수가 추가 된 순서대로 열거되어 있습니까?
- 6. javascript의 file_Get_contents
- 7. JavaScript의 타이밍
- 8. JavaScript의 버그
- 9. JavaScript의 정수
- 10. javascript의 array.select()
- 11. JavaScript의 preg_match?
- 12. JavaScript의 SecureRandom?
- 13. document.write로 Safari의 Javascript의 문제가 발생했습니다.
- 14. 자바 스크립트 객체 디자인
- 15. 명시 적 노드 참조가 주어진 "하위 트리"NodeList 만들기
- 16. JavaScript의 Array.length 문제
- 17. JavaScript의 MAC 주소
- 18. JavaScript의 임의 개체 생성기
- 19. javascript의 배열에 대한 unique()
- 20. JavaScript의 URL 도우미
- 21. Javascript의 자동 열거 형
- 22. 아마도 JavaScript의 명백한 문제
- 23. JavaScript의 이미지 병합
- 24. JavaScript의 기본 흐름 제어
- 25. python.org와 비슷한 Javascript의 "Home"?
- 26. JavaScript의 기본 생성자 래퍼?
- 27. IHttpHandlers를 통한 javascript의 현지화
- 28. JavaScript의 TCP 클라이언트
- 29. JavaScript의 Model-View-Controller
- 30. JavaScript의 동적 변수
친절하고 청초한 질문 :) – Mahi