it-swarm.com.de

document.all vs. document.getElementById

Wann sollten Sie document.all vs. document.getElementById verwenden?

50
coderex

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.

58
Phil Rykoff

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];
}
36
Marcel Korpel

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); 
}
13
Kevin Fegan

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.

6
Marcos Placona

document.querySelectorAll (und seine document.querySelector()-Variante, die das erste gefundene Element zurückgibt) ist viel, viel mächtiger. Sie können leicht:

  • holen Sie sich eine vollständige Sammlung mit 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;
  • verwenden Sie document.querySelectorAll("form") anstelle von document.forms und document.querySelectorAll("a") anstelle von document.links;
  • und führen Sie viel komplexere DOM-Abfragen durch (unter Verwendung eines verfügbaren CSS-Selektors), die mit anderen eingebauten Dokumenten nicht abgedeckt werden können.

Eine einheitliche Abfrage-API ist der Weg zu gehen. Selbst wenn document.all im Standard wäre, ist dies nur unpraktisch.

5
Multiversum

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).

2
DOK

Document.all wird ab IE11 nicht mehr unterstützt!

http://msdn.Microsoft.com/en-us/library/ie/ms537434(v=vs.85).aspx

2

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.

0
mike nelson