document.all против document.getElementById - PullRequest
50 голосов
/ 09 марта 2010

Когда следует использовать document.all против document.getElementById?

Ответы [ 8 ]

58 голосов
/ 09 марта 2010

document.all является проприетарным расширением Microsoft к стандарту W3C.

getElementById() стандартно - используйте это.

Однако, подумайте, пригодится ли использование библиотеки js, такой как jQuery . Например, $("#id") является эквивалентом jQuery для getElementById(). Кроме того, вы можете использовать больше, чем просто селекторы CSS3 .

36 голосов
/ 09 марта 2010

document.all очень , вам больше не нужно его использовать .

Цитировать Николай Закас :

Например, когда ДОМ был молодым, поддерживаются не все браузеры 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];
}
13 голосов
/ 18 февраля 2014

На самом деле document.all - это всего лишь минимально сравнимо с document.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.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); 
}
6 голосов
/ 09 марта 2010

document.all () - это нестандартный способ доступа к элементам DOM. Это устарело в нескольких браузерах. Это дает вам доступ ко всем подэлементам в вашем документе.

document.getElementById () является стандартным и полностью поддерживается. Каждый элемент имеет уникальный идентификатор в документе.

Если у вас есть:

<div id="testing"></div>

Использование

document.getElementById("testing"); 

Будет иметь доступ к этому конкретному div.

5 голосов
/ 08 ноября 2013

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 будет в стандарте, это просто неудобно.

2 голосов
/ 08 марта 2014

В частности, document.all было введено для IE4 ДО document.getElementById было введено.

Таким образом, наличие document.all означает, что код предназначен для поддержки IE4 , или пытается идентифицировать браузер как IE4 (хотя это могла быть Opera) или человека, который написал (или скопировал и вставил) код не был обновлен до последней версии.

В крайне маловероятном случае, когда вам нужно поддерживать IE4, вам понадобится document.all (или библиотека, которая обрабатывает эти древние спецификации IE).

2 голосов
/ 29 июля 2013

Согласно Архивированный Microsoft Dev Center Центр Internet Explorer , document.all устарел в IE 11 и Edge!

0 голосов
/ 24 августа 2018

document.all сейчас работает в Chrome (не уверен, когда с тех пор), но я пропускал его последние 20 лет .... Просто более короткое имя метода, чем неуклюжий document.getElementById. Не уверен, что он работает в Firefox, у этих парней никогда не было желания быть совместимыми с существующим вебом, всегда создавая новые стандарты вместо того, чтобы охватить существующий веб.

...