56

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

4

8 回答 8

65

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

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

但是,请考虑使用像jQuery这样的 js 库是否会派上用场。例如,$("#id")是 jQuery 等价于getElementById(). 另外,您可以使用的不仅仅是 CSS3选择器。

于 2010-03-09T10:55:14.303 回答
39

document.all很旧了,你不用再用了

引用尼古拉斯·扎卡斯的话:

例如,在 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];
}
于 2010-03-09T10:55:28.640 回答
15

实际上,document.all只是最低限度的可比性document.getElementById。你不会用一个代替另一个,他们不会返回相同的东西。

如果您试图通过浏览器功能进行过滤,您可以像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];
}


但是,在功能上,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); 
}
于 2014-02-17T23:36:55.290 回答
6

document.all()是一种访问 DOM 元素的非标准方式。它已被一些浏览器弃用。它使您可以访问文档中的所有子元素。

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

如果你有:

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

使用

document.getElementById("testing"); 

将有权访问该特定的 div。

于 2010-03-09T10:58:15.530 回答
5

document.querySelectorAll(及其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 查询(使用任何可用的 CSS 选择器),这些查询无法被其他文档内置函数覆盖。

统一查询API是要走的路。即使document.all符合标准,也很不方便。

于 2013-11-08T14:22:26.453 回答
2

根据Microsoft 存档的 Internet Explorer 开发中心document.all在 IE 11 和 Edge 中已弃用!

于 2013-07-29T11:20:54.480 回答
2

具体来说,document.all是在 IE4 之前document.getElementById介绍的。

因此,存在document.all意味着代码旨在支持 IE4,或者试图将浏览器识别为 IE4(尽管它可能是 Opera),或者编写(或复制和粘贴)代码的人没有启动在最新的。

万一您需要支持 IE4,那么您确实需要document.all(或处理这些古老 IE 规范的库)。

于 2014-03-08T18:13:21.220 回答
-1

document.all现在在 Chrome 中工作(不知道从什么时候开始),但在过去的 20 年里我一直在想念它......只是一个比笨重的方法名称更短的方法名称document.getElementById。不确定它是否适用于 Firefox,那些家伙从来没有任何与现有网络兼容的愿望,总是创建新标准而不是拥抱现有网络。

于 2018-08-24T02:34:03.760 回答