Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript getElementsByTagName(“*”)的性能影响是什么?_Javascript_Cross Browser - Fatal编程技术网

Javascript getElementsByTagName(“*”)的性能影响是什么?

Javascript getElementsByTagName(“*”)的性能影响是什么?,javascript,cross-browser,Javascript,Cross Browser,首先,我要说我不是JavaScript开发人员,所以这个问题可能比较基本 在模拟IE的非标准属性时,我使用的是getElementsByTagName(“*”),这两种方法之间是否存在显著的性能差异?本质上应该没有明显的性能影响,并且使用文档。无论如何,所有的都是不可接受的 然而,有一个问题是,无论如何,为什么您会对收集每个元素的集合感兴趣?我想不出有哪一个用例可以用另一种方式更好地处理。这并不是真正的性能问题,但值得注意:从getElementsByTagName返回的节点列表是live。如果

首先,我要说我不是JavaScript开发人员,所以这个问题可能比较基本


在模拟IE的非标准属性时,我使用的是
getElementsByTagName(“*”
),这两种方法之间是否存在显著的性能差异?

本质上应该没有明显的性能影响,并且使用
文档。无论如何,所有的
都是不可接受的


然而,有一个问题是,无论如何,为什么您会对收集每个元素的集合感兴趣?我想不出有哪一个用例可以用另一种方式更好地处理。

这并不是真正的性能问题,但值得注意:从getElementsByTagName返回的节点列表是live。如果您操作DOM,列表也将改变以反映这一点。

如果您感兴趣,您可能会发现John Resig的讲座很有趣。当使用像您这样的dom方法时,它与新用户和有经验的用户都相关

它讨论了许多浏览器中dom方法的许多可爱的警告

其中之一是,
getElementsByTagName(“*”)
将在IE5中返回no元素,并对IE7下的Objects+
getElementsByTagName(“*”
)进行处理,根据对话,它将:

  <a id="length"></a>
这样就不能迭代数组了


我不知道哪些javascript库可以绕过此缺陷,但您确实应该使用一个javascript库来避免跨浏览器问题

不同的浏览器和不同版本的浏览器具有不同的性能特征。如果您正在操作大型DOM,您应该在您关心的浏览器上进行基准测试。考虑人们发布的JavaScript库。它们展示了不同浏览器的性能差异有多大。因此,如果不知道您使用的是什么浏览器,这个问题就无法真正回答。然而,你也应该提防过度优化某些东西,因为这些东西对大多数机器上的大多数人来说可能根本不需要时间。

有趣的是,当你发布这篇文章时,我正在听这篇演讲。一个用例可以是你想在符合标准的xhtml文档中为所有href设置“target”属性的地方。另一个用例可以在@Nicon中找到-那么你仍然不需要“*”你需要“*[href]”(或者更可能只是“a”)@MOTTI -我没有看到你的意思,我有C++代码,使用MSHTML:IHTMLELMENT.GETYALL,我希望它在Firefox上工作,我可以创建一个COM类,实现IHTMLMeta元素并保存一个内部NIDOMNSHMLMLL元素。在这种情况下,我如何实现get_all?在这一点上不是一个真正的JS问题,是吗?:)我认为熟悉你所说的代码库的人必须从C++的角度来回答这个问题。
  var a = getElementsByTagName("a"); 
  a.length = ""; # This overrides the arrays length attribute :/