document.all与document.getElementById

时间:2010-03-09 10:53:39

标签: javascript getelementbyid

您应该何时使用document.alldocument.getElementById

8 个答案:

答案 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

引用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];
}

答案 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.formsdocument.querySelectorAll("a")代替document.links;
  • 并执行任何更复杂的DOM查询(使用任何可用的CSS选择器),这些查询无法被其他文档内置文件覆盖。

统一查询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中运行,那些家伙从来没有与现有网络兼容的愿望,总是创建新的标准而不是拥抱现有的网络。