document.all 与 document.getElementById

IT技术 javascript getelementbyid
2021-02-02 15:02:24

什么时候应该使用document.allvs. document.getElementById

6个回答

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

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

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

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];
}
@JWoodchuck 这是id您在 DOM 中设置的,例如<div id="foo">,然后idfoo
2021-03-23 15:02:24
(id) 来自哪里?这是一个神奇的变量吗?还是我先从某个地方取回它?
2021-04-06 15:02:24

事实上,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); 
}
@DSoa - 经过一些研究,我不完全确定哪个是正确的,或者如果不知何故,两者都会起作用。本页使用[i]like document.all[4].name本页使用(i)like document.all(i).tagName
2021-03-18 15:02:24
我不明白 document.all(i) 符号是如何工作的。不应该是 document.all[i] 吗?
2021-04-10 15:02:24

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符合标准,也很不方便。

我花了一段时间才意识到在 IE 中,document.all['word']返回了所有具有 id 元素的列表"word"即使页面上有多个具有相同 ID 的元素!所以用这个代替它document.querySelector('#word')打破了页面。我必须做的是,通过在 ID 后面放一个数字使 ID 唯一后,使用document.querySelectorAll('[id^="word"]'). 希望这会帮助某人!
2021-03-13 15:02:24