2013-07-02 53 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