2013-07-02 3 views
0

ID 목록이 작고 (약 10), HTML 페이지에서 해당 요소를 가져오고 싶습니다.GetElementById vs Dom iteration

나는 각 ID에에서 getElementById()를 사용 하는가, 또는 나는 그렇게처럼 DOM을 반복 할 수 있습니다 :이 작업을 수행하는 가장 빠른 방법은

for (var i = 0; i < element.childNodes.length; i++) 
{ 
    var childNode = <HTMLElement>element.childNodes[i]; 

    if (this.Ids.indexOf(node.id, 0) >= 0) 
      this.collection.setValue(node.id, <HTMLInputElement>node) 

    if (childNode.childNodes.length > 0) 
     this.iterateHtmlNodes(task, childNode); 
} 
  • ?
  • 가장 좋은 방법은 무엇입니까?
  • 가져올 요소의 수가 많으면 (> 100) 어떻게합니까?

저는 TypeScript를 사용하고 있습니다.

+3

iterating is madness! 'getElementById'는 네이티브 메소드에 대한 단일 함수 호출입니다. 수동으로 반복하는 것보다 12 배 빠릅니다. – Christoph

+0

그리 빠르지는 않습니다. * getElementById는 모든 브라우저에서 고도로 최적화 될 것이라고 생각하지만 실제 테스트를 통해 루프보다 빠르다고 확신 할 수 있습니다. JavaScript 루프는 요즘 대부분의 엔진에서 고도로 최적화되어 있습니다. 적은 수의 요소와 평평한 DOM 트리의 속도가 비슷하다는 것은 사실 일 수 있습니다. –

+0

내가 만든이 테스트를 확인해보십시오. [link] (http://jsperf.com/getelementsbyclassname-vs-iteration) – ThunderDev

답변

5

어떤 경우이든 GetElementById을 사용하면 브라우저에서와 같이 기본 기능 지원이 더 빠릅니다.

+0

감사합니다. 잘 모르 셨습니다 ^^ – ThunderDev

2

가장 빠른 방법은 기본 JS/Typescript 엔진의 구현에 따라 다르므로 일부 벤치마킹을 수행하고 결과를 확인해야합니다.

구문 분석 할 문서가 고유성 ID를 준수하는 경우 getElementById 접근 방식을 사용합니다. 실제 문서에서는 반복 접근법을 사용해야 할 수도 있지만 동일한 식별자를 가진 요소가 두 개 이상있는 경우 예기치 않은 결과가 발생할 수 있으므로주의해야합니다.

또한 "최상의"은 주관성을 의미하므로 코드 명확성을 위해 getElementById 옵션을 사용합니다.

+0

내 페이지는 id 고유성을 준수하므로 사용시 문제가 없습니다. 감사 – ThunderDev