什么时候应该使用document.all
vs. document.getElementById
?
document.all 与 document.getElementById
IT技术
javascript
getelementbyid
2021-02-02 15:02:24
6个回答
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];
}
事实上,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);
}
document.all()是一种访问 DOM 元素的非标准方式。它已被一些浏览器弃用。它使您可以访问文档中的所有子元素。
document.getElementById()是标准的并且完全受支持。每个元素在文档上都有一个唯一的 id。
如果你有:
<div id="testing"></div>
使用
document.getElementById("testing");
将有权访问该特定 div。
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
符合标准,也很不方便。