Когда вы должны использовать 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
будет в стандартном, это просто неудобно.
Ответ 6
Согласно архивному центру разработки Internet Explorer от Microsoft, document.all
устарел в IE 11 и Edge!
Ответ 7
В частности, для IE4 был введен document.all
до того, как был введен document.getElementById
.
Таким образом, наличие document.all
означает, что код предназначен для поддержки IE4 или пытается идентифицировать браузер как IE4 (хотя это может быть Opera), или тот, кто написал (или скопировал и вставил) код не был последним.
В очень маловероятном случае, когда вам нужно поддерживать IE4, вам понадобится document.all
(или библиотека, которая обрабатывает эти старые спецификации IE).
Ответ 8
document.all
теперь работает в Chrome (не уверен, когда с тех пор), но я пропускал его последние 20 лет.... Просто более короткое имя метода, чем неуклюжий document.getElementById
. Не уверен, работает ли он в Firefox, у этих парней никогда не было желания быть совместимыми с существующим вебом, всегда создавая новые стандарты вместо того, чтобы охватывать существующий веб.