2013-07-02 57 views
0

假設我有一個很小的ID列表(大約10),並且我想在Html頁面中獲取相應的元素。GetElementById vs Dom迭代

我應該對每個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

迭代是瘋狂的! 'getElementById'是對本地方法的單個函數調用。這比手動循環快十幾倍。 – Christoph

+0

沒有那麼快......儘管我認爲* getElementById將會被所有瀏覽器高度優化,但實際測試肯定會說它比循環更快。目前,大多數引擎對JavaScript循環進行了高度優化。可以肯定的是,對於少數元素和平坦的DOM樹,兩者在速度上都相似。 –

+0

看看我做了這個測試:[鏈接](http://jsperf.com/getelementsbyclassname-vs-iteration) – ThunderDev

回答

5

在任何情況下,使用GetElementById的速度都會比使用本地功能支持的瀏覽器更快。

+0

謝謝我不知道^^ – ThunderDev

2

最快的方法取決於底層JS/Typescript引擎的實現,所以您需要做一些基準測試並查看結果。

如果要解析的文檔符合id唯一性,我會採用getElementById方法。在真實世界的文檔中,您可能需要使用迭代方法,但如果有多個具有相同標識符的元素,請注意意外的結果。

此外,「最好」意味着一些主觀性,所以我會去代碼清晰並使用getElementById選項。

+0

我的網頁符合id唯一性,所以使用它沒有問題。謝謝 – ThunderDev