|
Attribute sind Knoten (nodes) nach dem
DOM-Modell. + Sie unterscheiden sich von anderen Knoten, indem sie keine childNodes haben können. + Jeder Knoten kann beliebig viele Attribute haben, jedes Attribut gehört zu genau einem Knoten. + Attribute haben die allgemeine Form name="wert" |
Die vorgestellten Methoden können Live ausprobiert werden. ► Das Ergebnis wird auf dieser Webseite dargestellt. ► Zusätzlich werden die Attribute der Testknoten nach Ausführung jeder Funktion neu analysiert und das Ergebnis im Quelltext angezeigt. |
|
|
Überprüfen sie selbst, ob und wie verschiedene Browser & Versionen
mit den vorgestellten Beispielen umgehen.
|
Javascript & DOM
|
Zugriff auf alle Elemente einer Webseite mit ECMAscript |
|
Voraussetzung für alle Beispiele dieser Seite:
Sie können nur die Attribute eines identifizierten Knotens bearbeiten ! |
|
| Anzahl & Liste | Bei der Anzahl der Attribute gibt es Missverständnisse |
| Lesen | Wert eines Attributs lesen |
| Schreiben / Ändern | Wert eines Attributs ändern |
| Neu | Ein neues Attribut anlegen |
| Löschen | Ein Attribut entfernen | Sonderfälle: |
| style-Attribute und das style-Objekt | |
| event-Attribute (onclick, onmouseover, ..) | |
Lesen von Attribut-Daten |
|
|
Die Standard-Methode
getAttribute() liest den Wert eines DOM-Knoten-Attributs.
Der Attribut-Name wird als String (Zeichenkette) übergeben. Live- |
n = document.getElementById("t2"); ava = n.getAttribute("align"); avc = n.getAttribute("class"); alert("align="+ava+"\nclass="+avc);
<div id="t2" align="center" class="b">
Mustertext
</div>
|
Alternative Methode: SchleifeIn einer Schleife werden alle (Anzahl s.o.) Attribute des DOM-Knotens durchlaufen. Jedes Attribut wird als eigener Knoten att isoliert und mit nodeName und nodeValue analysiert.So finden sogar ältere M$IE-Browser alle Attribute. Vergleichen sie das Ergebnis ihres Browsers bei Anwendung der Standardmethode und dieser mühsamen Methode: Live- Tipp: Nach einem Treffer können sie die for-Schleife mit break abbrechen. |
n = document.getElementById("t2");
na = n.attributes.length; for(i=0;i<na;i++) {
att = n.attributes[i];
}an = att.nodeName; av = att.nodeValue; if(an=="align") {ava=att.nodeValue;} if(an=="class") {avc=att.nodeValue;} alert("align="+ava+"\nclass="+avc); |
Alternative Methode:Alle gängigen Browser und neuere (!) M$IE-Versionen beherrschen die Methode getAttributeNodeSie liefert das Attribut als node-Objekt, dessen nodeValue ist der gesuchte Wert. Live- |
n = document.getElementById("t2");
att = node.getAttributeNode("align"); ava = att.nodeValue; att = node.getAttributeNode("class"); avc = att.nodeValue; alert("align="+ava+"\nclass="+avc); |
Ändern (Schreiben) von Attribut-Daten |
|
|
Die Standard-Methode setAttribute()
schreibt den Wert eines DOM-Knoten-Attributs. Attribut-Name und Attribut-Wert
werden als Strings (Zeichenketten) übergeben. Klicken sie jede der Live-Tasten mehrmals: Live- Live- |
n = document.getElementById("t3");
n.setAttribute("align","right"); n.setAttribute("class","test1");
<div id="t3" align="center"
class="b">
Mustertext
</div>
Anfangswerte wiederherstellen |
|
Alternative Methode (für M$IE-Browser, sehr zeitraubend): In einer Schleife werden alle Attribute des DOM-Knotens durchlaufen. Bei zutreffendem Attribut-Namen wird der Wert geschrieben. So können sogar ältere M$IE-Browser alle Attribute schreiben. ► Vorsicht - Moderne Browser können einen nodeValue nur dann verändern, wenn das entsprechende Attribut bereits existiert ! Vergleichen sie das Ergebnis ihres Browsers bei Anwendung der Standardmethode und dieser mühsamen Methode ! Live- Live- Anfangs- |
n = document.getElementById("t3");
na = n.attributes.length; for(i=0;i<na;i++) {
att = n.attributes[i];
}
an = att.nodeName; if(an=="align") {att.nodeValue="right";} if(an=="class") {att.nodeValue="test1";} |
Alternative Methode:Alle gängigen Browser und die neueren (!) M$IE-Versionen beherrschen die Methode setAttributeNodeMan erzeugt einen Attribut-Knoten, weist ihm einen Wert zu, und hängt ihn an den Element-Knoten an. Live- Live- Anfangs- |
n = document.getElementById("t3");
att = document.createAttribute("align"); att.nodeValue = "right"; n.setAttributeNode(att); att = document.createAttribute("class"); att.nodeValue = "test1"; n.setAttributeNode(att); |
|
Event-Attribute Viele mit "on" beginnende Attribute (z.B. onclick, onmouseover, ..) steuern die Verarbeitung von Ereignissen (events). |
Event-Attribute verhalten sich (insbesondere mit M$IE Browser) oft anders. ♦ Details im Absatz Event-Attribute auf dieser Seite. |
Neue Attribut-Knoten anlegen |
|
|
Die Standard-Methode createAttribute()
erzeugt einen neuen Attribut-Knoten. Weisen sie ihm einen
Wert nodeValue zu und hängen sie ihn
mit setAttributeNode an einen vorhandenen DOM-Knoten. Live- Live- Anfangs- Diese Methode erzeugt ein neues Attribut dieses Namens, oder ersetzt ein vorhandenes gleichnamiges Attribut. |
n = document.getElementById("t4");
// neues Attribut "align"
att = document.createAttribute("align");att.nodeValue = "center"; n.setAttributeNode(att); // neues Attribut "class"
att = document.createAttribute("class");att.nodeValue = "test1"; n.setAttributeNode(att);
<div id="t4">
Mustertext
</div>
|
|
Event-Attribute Viele Attribute (z.B. onclick, onmouseover, ..) steuern die Verarbeitung von Ereignissen (events). |
Event-Attribute verhalten sich (insbesondere mit M$IE Browser) oft anders. ♦ Details im Absatz Event-Attribute auf dieser Seite. |
Attribut-Knoten löschen |
|
Attribut-Wert löschen:Methode removeAttribute() löscht den Wert eines Attributs:Live- Live- Anfangs- |
n = document.getElementById("t5"); n.removeAttribute("align"); n.removeAttribute("class");
<div id="t5"
align="center" class="b">
Mustertext
</div>
|
Attribut löschenMethode removeAttributeNode() entfernt den ganzen Attribut-Knoten.Live- Live- Anfangs- Es bleibt noch der Weg, den Attributknoten in einer Schleife zu isolieren und nodeValue="" (Lösch-Wert je nach Typ !) zu setzen: Live- Live- Beide Methoden werden im Beispiel rechts gezeigt. |
n = document.getElementById("t5");
na = n.attributes.length; for(i=0;i<na;i++) {
att = n.attributes[i];
}
an = att.nodeName; if(an=="align") {
att.nodeValue="";
}n.removeAttributeNode(att); if(an=="class") {
att.nodeValue="";
}
n.removeAttributeNode(att); |
Das Attribut "style" und das style-Objekt |
|
|
Das Attribut style hat eine Sonderstellung. Als Attribut
hat es nur einen Wert vom Typ string, jedoch
keine childNodes Der Wert kann ein recht komplexer Text sein, dessen Verarbeitung aufwändig ist. Trotzdem wird diese Methode von modernen Browsern wie z.B. Firefox unterstützt. |
Andererseits ist style ein eigenes Objekt mit zahlreichen
Eigenschaften. In dieser Form ist es wesentlich einfacher,
einzelne style-Eigenschaften zu lesen oder zu schreiben. Details zum style-Objekt auf einer eigenen Webseite. |
|
Das Attribut style wird nach HTML-Syntax so wie jedes
andere Attribut behandelt. Live- Live- Live- |
<div id="t6"
style="color:#FF0000; font-weight:bold; text-align:center;">
Mustertext
</div>
|
Das style-Objekt:Nach DOM-Syntax existiert für jeden DOM-Knoten ein Unter-Objekt styleDieses Objekt enthält zahlreiche Eigenschaften, die es erlauben, jede CSS-Eigenschaft einzeln anzusprechen. Die Namen der Eigenschaften sind aus der CSS-Syntax abgeleitet. ♦ Details dazu im Kapitel style-Objekt. |
Lesen von CSS-Eigenschaften:
n = document.getElementById("t6");
c = n.style.color; Schreiben von Eigenschaften: n.style.color = "blue";
|
|