getElementById – Zugriff über das id-Attribut

getElementById zeigt zwei Angelköder

getElementById greift direkt auf ein Element zu, das durch sein id-Attribut eindeutig identifiziert ist. Das ist eine altbewährte und gängige Methode, um Elemente zu animieren, Inhalt zu ändern oder auszulesen. Die Methode hat nur ein Argument, die ID (die empfindlich auf Groß- und Kleinschreibung reagiert).

23-02-02 SITEMAP CSS HTML JS Basis JS Web Tutorial SVG

Zugriff auf Elemente des DOM

Und los geht das Angeln nach den Elementen. Dabei stehen heute viele Methoden zur Verfügung:

getElementById ist eine der ältesten und sichersten Methoden des DOM. Die Methode erfordert ein eindeutiges ID-Attribut, dass nur in einem einzigen HTML-Element vorkommen darf.

document.getElementById ('id')
<div id="header"> … <div>
getElementsByName ('name')
name-Attribut von Formularfeldern wie
<input type="radio" name="activ" value="active" /> aktiv
<input type="radio" name="activ" value="inactive" /> inaktiv
querySelector
Zugriff auf ein Element über einfache und komplexe CSS-Selektoren
querySelectorAll
Zugriff auf alle Element mit einem bestimmten CSS-Selektor

Die Methoden getElementsByTagName und getElementsByClassName sind mit der zuverlässigen Unterstützung von querySelector / querySelectorAll überflüssig geworden.

Auch getElementById ("id") läßt sich durch querySelector("#id") ersetzen. Während querySelector auf CSS-Selektoren agiert, betont getElementById die Einmaligkeit des Elements und kann die Lesbarkeit des Scripts verbessern. Der Zugriff über getElementById ist wohl auch einen Tick schneller als querySelector, aber dieser Geschwindigkeitsvorteil offenbart sich nur in Performancetests.

document . getElementById (id)

Sucht das Element mit dem id-Attribut id. Am einfachsten ist der direkte Sprung zum Ziel – zu einem Element des document-Knotens mit einem ID-Attribut.

<div id="fix"></div>
…
if (document.getElementById('fix')) {
  document.getElementById('fix').innerHTML = "Hier ist das Element";
  document.getElementById('fix').style.color = "green";
} else {
  console.log('Kein Element mit id=fix');
}
Element im Dokument ansprechen
Ein Element im Dokument ansprechen

Das Schöne am Zugriff auf Element mit der id: Wir müssen uns nicht um die Struktur des Dokuments kümmern und keinen Pfad vom Einstiegselement bis zum gewünschten Element finden.

Wichtig ist nur die Prüfung, ob ein Element mit der ID 'fix' auch wirklich existiert, damit – falls das Element nicht gefunden wird – kein Javascript-Fehler entsteht, der auch die Ausführung weiterer Funktionen behindern kann. getElementById gibt null zurück, wenn das Element nicht existiert.

Gibt es mehrere Elemente mit demselben id-Attribut, gibt getElementById das erste Element zurück.

Prüfen, ob element id existiert

Javascript darf sich nicht auf das HTML verlassen. Wenn kein Element mit der angegebenen id existiert, kommt es beim Zugriff zu einer Fehlermeldung.

let aberhallo = document.getElementById("aberhallo");
…
aberhallo.innerHTML = "16";        null is not an object oder aberhallo ist null oder Uncaught TypeError: Cannot set property 'innerHTML' of null

Der Fehler entsteht nicht bei der Definition der Variablen aberhallo, sondern beim ersten Zugriff. Prüfen mit try catch

let exists = true;
let aberhallo = document.getElementById("aberhallo");
try {
    if (aberhallo) exists = true;
} catch (e) {
    exists = false;
}

if (exists) {
    aberhallo = 16;
}

oder in einer Kurzfassung und ganz explizit.

if ( document.getElementById('aberhallo') !== null ) { 
   console.log ("aberhallo " + aberhallo.innerHTML );
} else {
   console.log (" kein aberhallo ");
} 

getElementById vs querySelector

querySelector wird seit IE8 von allen gängigen Browsern unterstützt und kann alles ansprechen, was durch einen CSS-Selector erreicht wird.

getElementById () ist eine Methode des document-Objekts, während querySelector () sowohl eine Methode des document-Objekts als auch des Elements ist. Die Frage, ob besser querySelector oder getElementById ist mehr eine akademische Spielwiese als ein praktisches Kriterium.

Man könnte ins Feld räumen, dass getElementById schneller ist (insbesondere beim Verketten – Chaining), und besser aus dem Code heraussticht als querySelector. Aber eine id kommt nur einmal im Dokument vor, der Geschwindigkeitsvorteil wird sich beim Benutzer nicht niederschlagen.

let list = document.getElementById("node-217").getElementsByClassName("num");
let query = document.querySelectorAll ("#node-217 .num" );

Für querySelector spricht die Konsistenz und das intuitive Zusammenstellen eines CSS-Selektors.

Auf keinen Fall macht es Sinn, alle benötigten Element einer Seite mit Id auszustatten und bei Formularen gewinnt querySelector einen Blumentopf für

let color = document.querySelector ("input[name=option]:checked").value;

Am Ende läuft die Diskussion hinaus auf »Was ihr wollt«.

querySelector

Mit der breiten Unterstützung ist querySelector / querySelectorAll die konsistente Alternative zu

  • getElementsByClassName ( "foo" ) querySelectorAll (".foo")
  • getElementsByName ( "mail" ) querySelectorAll ("input[name='mail']")

querySelector / querySelectorAll kommen nah an jQuery $ und erreichen jedes Element im Dokument mit Hilfe von CSS Selektoren.