Java Script und DOM


Ein wichter Teil der in der Webentwicklung im zusammenhang mit Java Script kaum mehr weg zu denken ist, ist DOM das Document Objekt Modell darauf möchte ich jetzt etwas näher eingehen. DOM ermöglicht uns den direkten zugriff auf Elemente oder Attribute eines HTML-dokuments. Ebenso erlabt es uns mit hilfe von Java Script das HTML dokument dynamisch Zu verändern. Dafür wird das HTML-Dokument in einen Dokumentenbaum gegliedert:

abb.1 der Dokumentbaum dieses Codes <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>HTML Seite</title>
  </head>
  <body>
    <img src="../res_eigene/googlemaps.png">
    <p align="center">Ein text Tag mit dem Attribut center</p>
  </body>
</html>


Anahnd dieses Beispiels kann man erkännen dass der Dokumentbaum eigentlich nur aus einer Rekursiven Auflistung der HTML-Tags Besteht. Diese Tags können in der "Punktschreibweise" ausgewertet werden. Also benutzen wir erstmal diesen Befehl:

document.body.firstChild

Wobei bodyden Wurzelknoten darstellt und firstChild den Ersten "kindknoten". Also in diesem Fall würde hier der image-Tag ausgewertet. Wollen wir den letzten Kindknoten aufrufen wählen wir den Befehl:

document.body.lastChild

Demnach wählen wir hier mit den p-Tag aus. Eine weitere Möglichkeit ist es ein Array über childNodes[] zu erzeugen so kann man dann auf die Kindknoten des Dokumentenbaums, b.z.w eines Elements über ein Array zugreifen. Zu beachten sei dass ein Array immer bei "0" beginnt! Wollen wir nun innerhalb einer "Elementebene" auf einen kindknoten zugreifen müssen wir next oder previousSilbling benutzen. Nun was können wir damit anfangen? Dazu sind die sog. "Node Eigenschaften" zu benutzen dies sind weitere Glieder der oben genannten Notierung. Zunächst möchten wir den Typ des Knotens auswerten und ausgeben. Dazu benutzen wir die Funktion nodeType hierzu ein kleines Beispiel:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>HTML Seite</title>
    <script>
    {
    document.body.innerHTML = document.body.innerHTML.replace(/[\r \n | \s]/g,'');
    alert(document.body.firstChild.nodeType);
    }
    </script>
  </head>
  <body>
    <img id="bild" src="../res_eigene/googlemaps.png">
    <p align="center" id="text">Ein text Tag mit dem Attribut center</p>
  </body>
</html>


Anzeigen Lasst euch an dem ersten Befehl nicht stören auch nicht an den Leerzeichen die bei der Darstellung fehlen. Dies hat seinen Grund denn Gecko Browser wie z.b Mozilla Firefox interpretieren jede leerzeile als ein eigenes Text element. Die Funktion ist nicht elegant und auch nicht ressourcenschonend aber der einfachheit halber hab ich sie hier angewendet.

Wenn ihr euch nun die Ausgabe des "alerts" anschaut bemerkt ihr, dass dort nur eine Nummer Ausgegeben wird dies entspricht einem Index, hier ein ausschnitt des Index:

1 => Elemet_node
3 => Text_node
2 => Attribut_node

Also erweitern wir die Funtion einfach um eine Switch Anweisung dann bekommen wir diese Ausgabe Beispiel 1a Anzeigen

Um die ressourcen fressende Funktion oben zu umgehen verwenden wir nun anstatt der firstChild, lastChild, Eigenschaften nun die Methoden getElementById(), getElementsByName(), getElementsByTagName() Mit diesen Methoden kann mann nun die Tags direkt auswerten. Dabei bleibt der Syntax immer der Selbe.

document.getElementsById("tagid")

document.getElementsByName('nameAttribut')

document.getElementsByTagName("TagName")

Da dies Methoden des document-Objekts steht dies auch immer vor der Methode. In verbindung mit diesen Methoden kann man nun bequem weitere Informationen Auswerten

nodeName:
Gibt bei Element knoten den Tag namen zurück

nodeValue:
Praktisch bei Text_nodes, dort gibt das den Text aus.Beispiel 1b

Attribute

Genug von Elementen lasst uns einmal das Auswerten von Attributen und ihren Eigenschaften betrachten. Gemacht wird das über die Eigenschaft attributes.Attributes ist einmal mit dem Index des Arrays oder mit dem Attributnamen aufrufbar. Ein Beispiel:


window.onload = function()
{
alert(document.getElementById("bild").attributes["src"].nodeValue);
}

Beispiel Aufrufen

Hier werten wir die URL des img Tags aus.

Zu guter letzt noch ein paar wichtige Methoden bei der verwendung von DOM.

appendChild("newNode") -- fügt einen Knoten an dass Ende eines anderen Knotens an.

removeChild() -- entfernt ein Element aus dem Dokumentenbaum

replaceChild("newNode","oldNode") -- ersetzt ein Element aus dem Dokumentenbaum

removeAttribute("attribut") -- Löscht ein Attributknoten aus einem Elment.

setAttribute("attribute","wert") -- Erzeugt ein neues Attribut mit dem gegebenen Wert


Valid HTML 4.01 Strict