document.all与document.getElementById
什么时候应该使用document.all
与document.getElementById
?
document.all
是W3C标准的专有微软扩展。
getElementById()
是标准的 – 使用它。
但是,考虑如果使用像jQuery这样的js库会派上用场。 例如, $("#id")
是getElementById()
的jQuery等价物。 另外,你可以使用不止CSS3select器。
document.all
是非常古老的,你不必再使用它了 。
引用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]; }
实际上, document.all
与document.getElementById
只有很小的差别。 你不会用一个替代另一个,他们不会返回相同的东西。
如果您试图通过浏览器function进行筛选,则可以像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]; }
但是,从function上来说, 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");
将有权访问该特定的分区。
document.querySelectorAll
(及其返回第一个find的元素的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查询(使用任何可用的CSSselect器),只是不能用其他文档构build。
统一查询API是最好的select。 即使document.all
将在标准中,这也是不方便的。
而document.all将不被IE11支持!
http://msdn.microsoft.com/en-us/library/ie/ms537434(v=vs.85).aspx
具体来说, document.all
是针对IE4引入的,引入了document.getElementById
。
所以, document.all
的存在意味着代码的目的是支持IE4 ,或者试图将浏览器识别为IE4(虽然它可能是Opera),或者编写(或复制和粘贴)代码的人wasn最新的。
在极不可能的情况下,您需要支持IE4,那么您确实需要document.all
(或处理这些古老的IE规范的库)。