| Hier wird vorgestellt, wie DOM-Knoten manipuliert werden. | Voraussetzung ist, dass die gewünschten Knoten vorher adressiert wurden. |
DOM & Javascript
|
Zugriff auf alle Elemente einer Webseite |
| Eigenschaften | Standard-Eigenschaften jedes Knotens |
| Adressierung von DOM-Knoten | Knoten gezielt aufsuchen |
| Löschen von DOM-Knoten | DOM-Knoten aus einem Baum entfernen |
| Neue DOM-Knoten | Neue DOM-Knoten anlegen und "einhängen" |
| Spezialfälle: | |
Attribute von DOM-Knoten |
#text-Knoten sind die "Endpunkte" im DOM-Baum |
Das style-Unterobjekt von DOM-Knoten |
|
In styleSheet-Objekten sind CSS-Regeln festgelegt |
|
| Beispiel | Text interaktiv in eine Webseite schreiben |
Standard-Eigenschaften von DOM-Knoten |
|
|
Unabhängig von der Art eines Knotens verfügt jeder DOM-Knoten
über einige Standard-Eigenschaften. Testen sie ihr DOM-Verständnis: Wieviele childNodes enthält der Knoten id="t6" im Beispiel rechts ? |
<div id="t6">
So sieht das Beispiel Live aus:
Das ist ein
</div>
<span style="color:red;">DOM</span> -Knoten Das ist ein DOM-Knoten
|
|
Die Funktion get_info im Beispiel rechts analysiert einige
Eigenschaften des mit seinem id-Attribut adressierten Knotens
(hier id="t5" ) und zeigt sie in einem Alarmfenster an.
Das kleine Programm ist beim Debuggen hilfreich. • Zunächst wird in function get_node_info der Start-Knoten mit getElementById identifiziert. • Mit diesem Knoten als Argument wird function get_node_info$ aufgerufen: • Vom übergebenen Knoten werden die Eigenschaften nodeName, nodeType, nodeValue und childNodes.length bestimmt und in der String-Variablen t gespeichert. t wird in einem Alarmfenster angezeigt. • Anschließend werden in einer Schleife alle vorhandenen childNodes analysiert: Die Funktion get_node_info$ ruft sich rekursiv selbst mit jedem childNode auf. |
function get_node_info(nid) {
var n=document.getElementById(nid);
}get_node_info$$(n); function get_node_info$(n) {
var t="\nnodeName = "+n.nodeName;
}
t+="\nnodeType = "+n.nodeType; t+="\nnodeValue = "+n.nodeValue; var nc=n.childNodes.length; t+="\nchildNodes.length = "+nc; alert(t); for(var i=0;i<nc;i++) { get_node_info$(n.childNodes[i]);
}
|
|
Live-
|
Ergebnis: Das Alarmfenster wird insgesamt 4x angezeigt: Der div-Knoten hat 3 childNodes (#text, span, #Text), der span-Knoten hat selbst 1 childNode (#text) |
|
Diese Informationen können sie entnehmen: ► nodeName: der Name des tags (ohne <>) oder #text, wenn es sich um einen Textknoten ("Inhalt") handelt. ► nodeType: 1=element <tag>, 2=attribute, 3=#text, 9=document ► nodeValue: bei tags null, bei Textknoten der enthaltenen Text. |
|
DOM-Knoten erzeugen und "einhängen" |
|
|
Javascript bietet die Möglichkeit, neue DOM-Elemente zu erzeugen und an der
gewünschten Stelle in den bestehenden Objekt-Baum eines Dokuments
"einzuhängen". • Zur Erzeugung wird Methode createElement verwendet. Das Attribut (hier span ) bestimmt die Art des erzeugten Elements. • Das neue Element wird erst dann wirksam (auf der Webseite sichtbar), wenn es mit Methode appendChild an ein existierendes Element (hier np ) angehängt wird. |
HTML:
<div id="test"></div>
Erzeugung eines neuen <span>-Elements und Anhängen
des neuen Elements an ein existierendes adressiertes Element:
var np=document.getElementById("test");
HTML-(Äquivalent) nachher:
var nspan=document.createElement("span"); np.appendChild(nspan);
<div id="test"><span></span></div>
|
Text-Knoten• Zur Erzeugung von #text-Knoten wird die Methode createTextNode verwendet. Sie erhält als Argument die Text-Daten des Elements.• Im Beispiel rechts wird zuerst ein neues <span>-Element nspan erzeugt. • Danach wird ein Text-Knoten nt erzeugt. • Der neue Text-Knoten wird an das <span>-Element angehängt. • Zuletzt wird das <span>-Element nspan zusammen mit all seinen childNodes ( = dem Text-Knoten nt ) an das existierende Element id="test" angehängt. |
Erzeugung eines <span>-Elements mit Text:
var np=document.getElementById("test");
HTML-(Äquivalent) nachher:
var nspan=document.createElement("span"); var nt=document.createTextNode("abc"); nspan.appendChild(nt); np.appendChild(nspan);
<div id="test">
<span>abc</span>
</div>
|
| Auf diese Weise lassen sich fast beliebig komplexe Strukturen von Knoten, childNodes, usw. erzeugen. Eine <table>-Tabelle beispielsweise kann mehrere 100 Sub-Elemente enthalten. | Ein besonderer Vorteil aller DOM-Methoden ist die Möglichkeit, sie auf alle Mitglieder der XML-Familie anzuwenden - nicht nur auf HTML sondern auch auf XHTML, SVG-Objektgrafik usw. |
|