document.all与document.getElementById

什么时候应该使用document.alldocument.getElementById

document.all是W3C标准的专有微软扩展。

getElementById()是标准的 – 使用它。

但是,考虑如果使用像jQuery这样的js库会派上用场。 例如, $("#id")getElementById()的jQuery等价物。 另外,你可以使用不止CSS3select器。

document.all非常古老的,你不必再使用它了 。

引用Nicholas Zakas的话 :

例如,当DOM年轻的时候,并不是所有的浏览器都支持getElementById(),所以有很多这样的代码:

 if(document.getElementById){ //DOM element = document.getElementById(id); } else if (document.all) { //IE element = document.all[id]; } else if (document.layers){ //Netscape < 6 element = document.layers[id]; } 

实际上, document.alldocument.getElementById只有很小的差别。 你不会用一个替代另一个,他们不会返回相同的东西。

如果您试图通过浏览器function进行筛选,则可以像Marcel Korpel的回答那样使用它们:

 if(document.getElementById){ //DOM element = document.getElementById(id); } else if (document.all) { //IE element = document.all[id]; } else if (document.layers){ //Netscape < 6 element = document.layers[id]; } 

但是,从function上来说, document.getElementsByTagName('*')更像document.all

例如,如果您实际上要使用document.all来检查页面上的所有元素,如下所示:

 var j = document.all.length; for(var i = 0; i < j; i++){ alert("Page element["+i+"] has tagName:"+document.all(i).tagName); } 

你可以使用document.getElementsByTagName('*')来代替:

 var k = document.getElementsByTagName("*"); var j = k.length; for (var i = 0; i < j; i++){ alert("Page element["+i+"] has tagName:"+k[i].tagName); } 

document.all()是访问DOM元素的非标准方式。 它从几个浏览器已经被弃用了。 它使您可以访问文档上的所有子元素。

document.getElementById()是一个标准的,完全支持。 每个元素在文档上都有一个唯一的ID。

如果你有:

 <div id="testing"></div> 

运用

 document.getElementById("testing"); 

将有权访问该特定的分区。

document.querySelectorAll (及其返回第一个find的元素的document.querySelector()变体)非常强大得多。 您可以轻松地:

  • 使用document.querySelectorAll("*")获取整个集合,有效地模拟非标准的document.all属性;
  • 使用document.querySelector("#your-id") ,有效地模拟document.getElementById()函数;
  • 使用document.querySelectorAll(".your-class") ,有效地模拟document.getElementsByClassName()函数;
  • 使用document.querySelectorAll("form")而不是document.forms ,而document.querySelectorAll("a")而不是document.links ;
  • 并执行任何更复杂的DOM查询(使用任何可用的CSSselect器),只是不能用其他文档构build。

统一查询API是最好的select。 即使document.all将在标准中,这也是不方便的。

而document.all将不被IE11支持!

http://msdn.microsoft.com/en-us/library/ie/ms537434(v=vs.85).aspx

具体来说, document.all是针对IE4引入的,引入了document.getElementById

所以, document.all的存在意味着代码的目的是支持IE4 ,或者试图将浏览器识别为IE4(虽然它可能是Opera),或者编写(或复制和粘贴)代码的人wasn最新的。

在极不可能的情况下,您需要支持IE4,那么您确实需要document.all (或处理这些古老的IE规范的库)。