TreeWalker | NN 7 IE nicht zutreffend DOM 2 | |||||||
Das TreeWalker-Objekt ist eine dynamische, hierarchische Liste der Nodes, die den durch die Methode document.createTreeWalker( ) definierten Kriterien entsprechen. Die Einträge in dieser Liste weisen dieselbe Parent-Child-Hierarchie auf wie die entsprechenden Nodes im Dokumentbaum. Die createTreeWalker( )-Methode gibt an, mit welcher Node die Liste beginnt und welche Nodes (oder Nodeklassen) herausgefiltert und daher nicht in die Liste aufgenommen werden. |
||||||||
Das TreeWalker-Objekt unterhält eine Art Zeiger in dieser Liste (sodass diese Aufgabe Ihren Skripts erspart bleibt). Mithilfe der Methoden dieses Objekts kann ein Skript auf die jeweils nächste oder vorhergehende Node (bzw. die jeweils übergeordnete, gleichgestellte oder untergeordnete Node) in der Liste zugreifen, wobei der Zeiger um eine Position in die durch die jeweils ausgewählte Methode bestimmte Richtung verschoben wird. Wenn ein Skript den Dokumentbaum verändert, nachdem das TreeWalker-Objekt erstellt wurde, wird die Reihenfolge der Nodes in der TreeWalker-Liste automatisch angepasst. |
||||||||
Das TreeWalker-Objekt kann ohne Einschränkung auch in einem HTML-Dokument eingesetzt werden, entfaltet seine volle Wirkung jedoch erst in einem XML-Datendokument. Das W3C-DOM bietet beispielsweise keine Möglichkeit, rasch auf alle Elemente zuzugreifen, die einen bestimmten Attributnamen aufweisen (was für den XPATH-Standard auf dem Server kein Problem darstellt). Sie können jedoch ein TreeWalker-Objekt definieren, das nur auf Nodes mit dem gewünschten Attribut verweist, und diese dann nacheinander ansprechen, ohne also in einer Skriptschleife mühevoll immer wieder alle Nodes nach den gewünschten Elementen durchsuchen zu müssen. Die folgende Filterfunktion nimmt zum Beispiel nur solche Nodes in ein TreeWalker-Objekt auf, die das Attribut author enthalten. function authorAttrFilter(node) { if (node.hasAttribute("author")) { return NodeFilter.FILTER_ACCEPT; } return NodeFilter.FILTER_SKIP; } |
||||||||
Diese Funktion wird als Referenz in einem Parameter an eine createTreeWalker( )-Methode übergeben, die die Liste zusätzlich auf Elementnodes beschränkt: var authorsOnly = document.createTreeWalker(document, NodeFilter.SHOW_ELEMENT, authorAttrFilter, false); |
||||||||
Anschließend können Sie mithilfe der TreeWalker-Objektmethoden eine Referenz auf eine der in der Liste aufgeführten Nodes abrufen. Beim Aufruf der Methode wendet das TreeWalker-Objekt den Filter auf den Eintrag an der aktuellen Position des internen Zeigers an und fährt sodann in der von der Methode angegebenen Richtung fort. Die nächste Node im Dokumentbaum, die den Methoden- und Filterkriterien entspricht, wird zurückgegeben. Nachdem Sie diese Nodereferenz erhalten haben, können Sie die betreffende Node, unabhängig von den in der TreeWalker-Liste enthaltenen Einträgen, mit jeder beliebigen DOM-Nodeeigenschaft oder -methode bearbeiten. |
||||||||
Objektmodellreferenz | ||||||||
TreeWalkerReference
|
||||||||
Objektspezifische Eigenschaften | ||||||||
|
||||||||
Objektspezifische Methoden | ||||||||
|
||||||||
Objektspezifische Ereignisbehandlungsroutineneigenschaften | ||||||||
Keine. |
currentNode | NN 7 IE nicht zutreffend DOM 2 |
Lesen/Schreiben | |
Gibt eine Referenz auf die Node an der Position des TreeWalker-Zeigers zurück. Doch was noch wichtiger ist, Sie können dieser Eigenschaft auch eine Referenz auf eine Node im Dokumentbaum zuweisen und auf diese Weise die Position des Zeigers selbst festlegen. Wenn die zugewiesene Node normalerweise aus der Liste herausgefiltert würde, wird der nächste Methodenaufruf an ihrer Position gestartet, so als ob die Node nicht aus der Liste herausgefiltert worden sei. |
|
Beispiel | |
myTreeWalker.currentNode = document.getElementById("main"); |
|
Wert | |
Referenz auf eine Node im Dokumentbaum. |
|
Standardwert | |
Erste Node des Dokuments. |
expandEntityReference, filter, root, whatToShow | NN 7 IE nicht zutreffend DOM 2 |
Schreibgeschützt | |
Diese vier Eigenschaften spiegeln die beim Erstellen des Objekts an die Methode document.createTreeWalker( ) übergebenen Parameterwerte wider. |
firstChild( ), lastChild( ), nextSibling( ), parentNode( ), previousSibling( ) | NN 7 IE nicht zutreffend DOM 2 |
Diese Methoden geben Referenzen auf Nodes in der hierarchischen Liste des TreeWalker-Objekts zurück. Die Parent-Child-Beziehungen zwischen den Nodes entsprechen denen der Nodes innerhalb des Dokumentbaums. Wenn Sie eine dieser Methoden aufrufen, wird der interne TreeWalker-Zeiger an eine Stelle neben der Position der Node in der TreeWalker-Liste gesetzt. Falls keine Node vorhanden ist, die der gewünschten Referenz entspricht, gibt die Methode den Wert null zurück. Dies bedeutet, dass Sie prüfen müssen, ob die Node existiert, bevor Sie versuchen, ihre Eigenschaften auszulesen: if (myTreeWalker.nextSibling( )) { var theTag = myTreeWalker.currentNode.tagName; } |
|
Wenn Sie eine Eigenschaft einer Nullreferenz direkt referenzieren (z. B. mit der Methode myTreeWalker.nextSibling( ).tagName), wird ein Referenzfehler zurückgegeben. |
|
Parameter | |
Keiner. |
|
Zurückgegebener Wert | |
Referenz auf eine Node im Dokumentbaum. |
nextNode( ), previousNode( ) | NN 7 IE nicht zutreffend DOM 2 |
Rücken den internen NodeIterator-Zeiger um eine Position vor (nextNode( )) oder zurück (previousNode( )) und geben eine Referenz auf die Node zurück, die der Zeiger hierbei passiert hat. Diese beiden Methoden arbeiten wie in einer flachen Hierarchie (nach Art des NodeIterator-Objekts). |
|
Parameter | |
Keiner. |
|
Zurückgegebener Wert | |
Referenz auf eine Node im Dokumentbaum. |