您应该何时使用document.all
与document.getElementById
?
答案 0 :(得分:58)
document.all
是W3C标准的Microsoft专有扩展。
getElementById()
是标准的 - 使用它。
但是,考虑使用像jQuery这样的js库会派上用场。例如,$("#id")
是getElementById()
的jQuery等价物。另外,您可以使用more than just CSS3选择器。
答案 1 :(得分:36)
document.all
非常旧,您don't have to use it anymore。
例如,当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];
}
答案 2 :(得分:13)
实际上, document.all
仅 最低 与 document.getElementById
相当。你不会用一个代替另一个,他们不会返回相同的东西。
如果您尝试过滤浏览器功能,可以像Marcel Korpel's answer一样使用它们:
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);
}
答案 3 :(得分:6)
document.all()是访问DOM元素的非标准方式。它已被少数浏览器弃用。它使您可以访问文档中的所有子元素。
document.getElementById()是一种标准且完全受支持。每个元素在文档上都有唯一的ID。
如果你有:
<div id="testing"></div>
使用
document.getElementById("testing");
可以访问该特定div。
答案 4 :(得分: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
; 统一查询API是最佳选择。即使document.all
符合标准,也只是不方便。
答案 5 :(得分:2)
根据Microsoft's archived Internet Explorer Dev Center,在IE 11和Edge中不推荐使用document.all
答案 6 :(得分:2)
具体而言,{4}引入了document.all
之后引入document.getElementById
。
因此,document.all
的存在意味着代码支持IE4 ,或者试图将浏览器识别为IE4(虽然它可能是Opera),或者编写(或复制并粘贴)代码的人最近没有。
在非常不可能的事件中,您需要支持IE4,那么,您需要document.all
(或处理这些古老IE规范的库)。
答案 7 :(得分:0)
document.all
现在可以在Chrome中运行(不确定从什么时候开始),但是最近20年来我一直在丢失它。...方法名称比笨拙的document.getElementById
短。不确定它们是否可以在Firefox中运行,那些家伙从来没有与现有网络兼容的愿望,总是创建新的标准而不是拥抱现有的网络。