Javascript 의 컬렉션 DOM 체할 수 없는 이유는 무엇 역방향으로 배열입니다.역()?
-
09-06-2019 - |
문제
무엇이 문제가 될 수 있으로 반전의 배열 DOM 체로서 다음과 같은 코드:
var imagesArr = new Array();
imagesArr = document.getElementById("myDivHolderId").getElementsByTagName("img");
imagesArr.reverse();
Firefox 에서 3 때,나는 전화 reverse()
방법 스크립트 실행을 멈추고 다음과 같은 오류가 표시됩니다면 콘솔에서는 웹 개발자 도구 모음입니다.
imagesArr.reverse is not a function
이 imagesArr
변수를 반복할 수 있을 통해 루와 같은 요소 imagesArr[i]
액세스할 수 있다,그래서 그것은 보이지 않으로 배열을 호출할 때 reverse()
방법?
해결책
기 때문에 getElementsByTag 이름이 실제로 반환된 구조입니다.그것은 비슷한 배열은 다음과 같이 색인 속성에 대한 문법적 편익이지만,그것은 지 훌륭한 기능들을 가지고 있습니다.예를 들어,설정 항목은 실제로 지속적으로 역동적으로 업데이트를 추가하는 경우 새로운 img 태그에서 myDivHolderId,그것은 자동으로 나타나에서 imagesArr.
보 http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-536297177 니다.
다른 팁
getElementsByTag()
반환된 대의 훌륭한 기능들을 가지고 있습니다.할 수 있는 변환된 배열에만 참고 있는 배열 될 것입니다 또 다른 객체를 반전하는 그것이 영향을 미치지 않습니다 DOM 노드는 위치입니다.
var listNodes = document.getElementById("myDivHolderId").getElementsByTagName("img");
var arrayNodes = Array.slice.call(listNodes, 0);
arrayNodes.reverse();
기 위해서 위치를 변경하려면,당신은 당신을 제거해야 DOM 노드를 추가 할 그들 모두는 다시 오른쪽에 위치입니다.
Array.prototype.slice.call(arrayLike, 0)
훌륭한 방법으로 변환하는 배열을 배열에만 사용하는 경우 자바 스크립트 라이브러리,그것 있습니다 실제로 제공하도 좋고 빠른 방법으로 그것을 할 수 있습니다.예를 들어,jQuery 가 $.makeArray(arrayLike)
.
또한 사용할 수 있는 방법을 배열에 직접된:
Array.prototype.reverse.call(listNodes);
getElementsByTag()
반환된 대의 훌륭한 기능들을 가지고 있습니다.변환해야 합된 배열한 다음 그것을 반대.
var imagesArr = [].slice.call(document.getElementById("myDivHolderId").getElementsByTagName("img"), 0).reverse();
이 질문은 세 가지고 있습니다 약간의 설명으로 일부의 해답은 여기 있으로 오래 W3C 변경 정의와 결과적으로 반환 값의 이 방법 getElementsByTagName()
고 getElementsByClassName()
이 방법 의 시간으로 쓰고 이에 응답 객체를 반환 비어 있는지의 유형 HTMLCollection
고 지 NodeList
.
그것은 같은 사이의 차이는 속성 children
을 반환하는 개체의 유형 HTMLCollection
때문에 그것은 단지 구성 요소를 제외하고 텍스트 또는 의견을 노드 childNodes
을 반환하는 개체의 유형 NodeList
할 수 있기 때문에 다른 노드의 종류와 같은 텍스트 및 코멘트 뿐만 아니라.
참고:나에 접 여기에 익스프레스 나의 부족에 대한 통찰력을 이유 querySelectorAll()
방법 현재 반환 NodeList
과하지 않는 HTMLCollection
이후 그것은 독점적으로 작동 요소에 대한 노드에서 문서를 다른 아무것도 있습니다.
아마도 그것을 할 수있는 뭔가가 가진 잠재적인 범위의 다른 노드형 미래 그리고 그들에 대한 더 많은 증거래 솔루션을 알고 정말입니까?:)
편집:나는 그 뒤에 있는 근거 이 결정에 대한 선택 NodeList
과하지 않는 HTMLCollection
대 querySelectorAll()
.
이후 그들은 건설 HTMLCollection
하고 독점적으로 전적으로 라이브 이후 이 방법은 필요가 없이 살고,기능,그들은 결정을 위해 NodeList
구현 대신에 최선의 서비스를 제공하기 위해 그 목적을 경제적으로 그리고 효율적으로 합니다.
귀하의 첫 번째 라인은 무관하지 않기 때문에 강요당하는 변수,자바 스크립트 작동이 다른 방법이다.imagesArr,지의 유형 Array(),그의 어떤 반환한 유형의 getElementsByTagName("img")입니다.이 경우에는,그 htmlcollection 객 Firefox3.
유일한 방법은 이 물체는 인덱서와 길이 있습니다.에서 작업하기 위해서는 반대로,다만 반복니다.