Hauptmenü

Untermenü

DOM-Manipulation - Das Wurzelelement

1. Der Start

Bevor man über das node-Objekt auf einen wie auch immer gearteten Knoten zugreifen kann, benötigt man eine Art Ausgangsposition, von der man beginnt. Dazu gibt es vier verschiedene Möglichkeiten, die uns das document-Objekt bietet.

document.getElementById

Greift auf ein HTML-/XML-Element zu, das eine ID hat. Und die muss in diesem Fall pro Dokument einzigartig(!) sein, da JavaScript sonst nicht weiß, welches Element gemeint ist. Also immer schön den HTML-Code validieren.


<div id="bla">
  ...
</div>

wurzel document.getElementById('bla');

document.getElementsByTagName

Speichert alle Tags desselben Typs in einem Array. Bei folgendem Beispiel enthält das Array h2s zwei Einträge.


<h1>Bla</h1>
<h2>Blubb</h2>
<h2>Blubber</h2>

h2s document.getElementsByTagName('h2');
alert (h2s.length);

getElementsByName

Arbeitet genau so wie getElementsByTagName, greift aber auf die Elemente über deren Attribut name zu. Ich persönlich habe damit bisher eher selten gearbeitet, da meiner Meinung nach diese Verwendung sehr oft eine Notlösung ist. Außerdem kann man das name-Attribut nicht bei jedem HTML-Element verwenden. Zumindest, wenn man Wert auf validen Code legt.

getElementsByClassName

Funktioniert genau so wie getElementsByTagName, greift aber auf den Klassennamen eines HTML-Elements zu. Ist allerdings im IE erst ab Version 9 verfügbar.

2. Referenzvariablen

In obigen Beispielen sind wurzel oder h2s keine Variablen im eigentlichen Sinne, sondern Referenzen(!) auf die entsprechenden Elemente. Das bedeutet, ihre Inhalte sind global verfügbar ... solange man sie innerhalb einer Funktion nicht mit dem Schlüsselwort var als privat deklariert! Das könnt ihr auch sehr gut an folgendem Code sehen.


function setStart()
{
  // Das hier funktioniert
  rahmen     document.getElementById ('rahmen');
  // Das nicht!
  var rahmen document.getElementById ('rahmen');
  showNodes();
}

function showNodes()
{
  absaetze rahmen.getElementsByTagName('p');
  alert (absaetze.length);
}

<div id="rahmen">
  <p>Und hier kommt der Fließtext.</p>
  <p>Und hier auch</p>
</div>
<p>
  <a href="#" onclick="setStart();">Zeigen</a>
</p>

3. Varianten

Man kann die entsprechenden Elemente einzeln über Referenzen, aber auch direkt ansteuern. Da lässt uns JavaScript einige Freiheiten. Daher sind die beiden folgenden Beispiele in ihrem Ergebnis identisch:


// Variante 1
document.getElementById ('rahmen');
r.getElementsByTagName('p');

// Variante 2
document.getElementById ('rahmen').getElementsByTagName('p');

Ein Hinweis

Man kann das zwar bis zum Erbrechen in die Länge ziehen, sollte es aber tunlichst vermeiden, da die Übersichtlichkeit doch stark darunter leidet.

zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt