Wann sollten Sie document.all
vs. document.getElementById
verwenden?
document.all
ist eine proprietäre Microsoft-Erweiterung des W3C-Standards.
getElementById()
ist Standard - verwenden Sie das.
Überlegen Sie jedoch, ob die Verwendung einer js-Bibliothek wie jQuery hilfreich sein könnte. Zum Beispiel ist $("#id")
das jQuery-Äquivalent für getElementById()
. Außerdem können Sie mehr als nur CSS3 Selektoren verwenden.
document.all
ist very alt, Sie müssen es nicht mehr verwenden .
Nicholas Zakas zitieren:
Als das DOM jung war, wurde beispielsweise Nicht alle Browser werden unterstützt getElementById (), und so gab es eine viel Code, der so aussah:
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];
}
Eigentlich ist document.all
nur minimal vergleichbar mit document.getElementById
. Sie würden eines nicht anstelle des anderen verwenden, sie geben nicht die gleichen Dinge zurück.
Wenn Sie versuchen, die Browserfunktionen zu filtern, können Sie diese wie in Marcel Korpels Antwort wie folgt verwenden:
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];
}
Funktionell ist document.getElementsByTagName('*')
jedoch äquivalent zu document.all
.
Wenn Sie beispielsweise document.all
verwenden, um alle Elemente auf einer Seite wie folgt zu untersuchen:
var j = document.all.length;
for(var i = 0; i < j; i++){
alert("Page element["+i+"] has tagName:"+document.all(i).tagName);
}
sie würden stattdessen document.getElementsByTagName('*')
verwenden:
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 () ist eine nicht standardisierte Methode für den Zugriff auf DOM-Elemente. Es wurde von einigen Browsern als veraltet eingestuft. Sie haben Zugriff auf alle Unterelemente in Ihrem Dokument.
document.getElementById () ist ein Standard und wird vollständig unterstützt. Jedes Element hat eine eindeutige ID im Dokument.
Wenn Sie haben:
<div id="testing"></div>
Verwenden
document.getElementById("testing");
Wird Zugang zu diesem spezifischen div haben.
document.querySelectorAll
(und seine document.querySelector()
-Variante, die das erste gefundene Element zurückgibt) ist viel, viel mächtiger. Sie können leicht:
document.querySelectorAll("*")
und emulieren Sie effektiv die nicht standardmäßige document.all
-Eigenschaft.document.querySelector("#your-id")
verwenden, document.getElementById()
-Funktion effektiv emulieren;document.querySelectorAll(".your-class")
verwenden, document.getElementsByClassName()
-Funktion effektiv emulieren;document.querySelectorAll("form")
anstelle von document.forms
und document.querySelectorAll("a")
anstelle von document.links
;Eine einheitliche Abfrage-API ist der Weg zu gehen. Selbst wenn document.all
im Standard wäre, ist dies nur unpraktisch.
Insbesondere wurde document.all
für IE4 eingeführt, BEVOR document.getElementById
eingeführt wurde.
Das Vorhandensein von document.all
bedeutet also, dass der Code zur Unterstützung von IE4 gedacht ist oder versucht, den Browser als IE4 zu identifizieren (obwohl es auch Opera gewesen sein könnte) oder die Person, die den Browser geschrieben (oder kopiert und eingefügt) hat Code war auf dem neuesten Stand nicht.
In dem höchst unwahrscheinlichen Fall, dass Sie IE4 unterstützen müssen, benötigen Sie document.all
(oder eine Bibliothek, die diese alten IE - Spezifikationen behandelt).
Document.all wird ab IE11 nicht mehr unterstützt!
http://msdn.Microsoft.com/en-us/library/ie/ms537434(v=vs.85).aspx
document.all
funktioniert jetzt in Chrome (nicht sicher wann seit), aber ich habe es die letzten 20 Jahre vermisst .... Einfach ein kürzerer Methodenname als der klobige document.getElementById
. Nicht sicher, ob es in Firefox funktioniert, diese Jungs hatten nie den Wunsch, mit dem bestehenden Web kompatibel zu sein, und kreierten immer neue Standards, anstatt das bestehende Web zu akzeptieren.