NodeList

2859 단어

NodeList


개술

NodeList 대상은 하나의 노드의 집합으로 Node.childNodes and thequerySelectorAll에서 되돌아온다.

등록 정보

length
  • NodeList 에 포함된 노드 개수.

  • 메서드

  • item ( idx )
  • NodeList 객체에 지정된 색인 노드를 반환하고 색인이 경계를 벗어나면 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의 상속 메커니즘은 원형에 기반을 두고 있다.수조원소가 일부 수조원법(예를 들어 forEachmap이 있는 이유는 원형 체인에 다음과 같은 방법이 있기 때문이다.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...infor each...in를 사용해서 NodeList 대상의 요소를 훑어보지 마세요. NodeList 대상의length와item 속성도 범람하기 때문에 스크립트가 잘못 실행될 수 있습니다. 만약에 상기 두 개의 속성도 DOM 대상으로 간주한다면.

    좋은 웹페이지 즐겨찾기