document.all与document.getElementById

cod*_*rex 54 javascript getelementbyid

当你应该使用document.alldocument.getElementById

Phi*_*off 62

document.all 是W3C标准的Microsoft专有扩展.

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

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


Mar*_*pel 38

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];
}
Run Code Online (Sandbox Code Playgroud)


Kev*_*gan 13

实际上,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];
}
Run Code Online (Sandbox Code Playgroud)


但是,在功能上,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);
}
Run Code Online (Sandbox Code Playgroud)

你会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); 
}
Run Code Online (Sandbox Code Playgroud)

  • 我不明白document.all(i)标记的工作方式。不应该是document.all [i]吗? (2认同)
  • @DSoa - 经过一些研究,我不完全确定哪个是正确的,或者如果不知何故,两者都可以。[本页](http://www.java2s.com/Tutorial/JavaScript/0280__Document/documentall.htm) 使用 **`[i]`** 就像 **`document.all[4].name`** , [本页](http://www.java2s.com/Tutorial/JavaScript/0280__Document/Listallelementsbyreferencethedocumentall.htm) 使用 **`(i)`** 就像 **`document.all(i).tagName` **。 (2认同)

Mar*_*ona 6

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

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

如果你有:

<div id="testing"></div>
Run Code Online (Sandbox Code Playgroud)

运用

document.getElementById("testing"); 
Run Code Online (Sandbox Code Playgroud)

可以访问该特定div.


Mul*_*sum 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符合标准,也只是不方便.