Document.all vs. document.getElementById

Когда вы должны использовать document.all vs. document.getElementById?

Ответ 1

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

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

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

Ответ 2

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];
}

Ответ 3

На самом деле 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); 
}

Ответ 4

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

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

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

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

Используя

document.getElementById("testing"); 

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

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

Ответ 7

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

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

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

Ответ 8

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