Dokumentation: createTreeWalker()-Methode
Baseline
Weitgehend verfügbar
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit Juli 2015 browserübergreifend verfügbar.
Die Document.createTreeWalker()-Erstellermethode gibt ein neu erstelltes TreeWalker-Objekt zurück.
Syntax
createTreeWalker(root)
createTreeWalker(root, whatToShow)
createTreeWalker(root, whatToShow, filter)
Parameter
root-
Ein
Node, das die Wurzel desTreeWalker-Objekts darstellt, welche der Anfangswert vonTreeWalker.currentNodeist. whatToShowOptional-
Ein
unsigned long, das eine Bitmaske repräsentiert, die durch Kombination der Konstanteneigenschaften vonNodeFiltererstellt wurde. Es ist eine bequeme Möglichkeit, bestimmte Knotentypen zu filtern. Es verwendet standardmäßig0xFFFFFFFF, was der KonstanteNodeFilter.SHOW_ALLentspricht.Konstante Zahlenwert Beschreibung NodeFilter.SHOW_ALL0xFFFFFFFFZeigt alle Knoten an. NodeFilter.SHOW_ATTRIBUTE0x2Zeigt Attr-Knoten an.NodeFilter.SHOW_CDATA_SECTION0x8Zeigt CDATASection-Knoten an.NodeFilter.SHOW_COMMENT0x80Zeigt Comment-Knoten an.NodeFilter.SHOW_DOCUMENT0x100Zeigt Document-Knoten an.NodeFilter.SHOW_DOCUMENT_FRAGMENT0x400Zeigt DocumentFragment-Knoten an.NodeFilter.SHOW_DOCUMENT_TYPE0x200Zeigt DocumentType-Knoten an.NodeFilter.SHOW_ELEMENT0x1Zeigt Element-Knoten an.NodeFilter.SHOW_ENTITY0x20Veraltet, nicht mehr wirksam. NodeFilter.SHOW_ENTITY_REFERENCE0x10Veraltet, nicht mehr wirksam. NodeFilter.SHOW_NOTATION0x800Veraltet, nicht mehr wirksam. NodeFilter.SHOW_PROCESSING_INSTRUCTION0x40Zeigt ProcessingInstruction-Knoten an.NodeFilter.SHOW_TEXT0x4Zeigt Text-Knoten an.Hinweis: Die Konstante
NodeFilter.SHOW_ATTRIBUTEist nur wirksam, wenn die Wurzel ein Attributknoten ist. Da das Elternteil einesAttr-Knotens immernullist, werdenTreeWalker.nextNode()undTreeWalker.previousNode()niemals einenAttr-Knoten zurückgeben. UmAttr-Knoten zu durchlaufen, verwenden Sie stattdessenElement.attributes. filterOptional-
Eine Rückruffunktion oder ein Objekt mit einer
acceptNode()-Methode, dieNodeFilter.FILTER_ACCEPT,NodeFilter.FILTER_REJECToderNodeFilter.FILTER_SKIPzurückgibt. Die Funktion oder Methode wird für jeden Knoten im Teilbaum aufgerufen, der an derroot-Stelle basiert und durch daswhatToShow-Flag als einzuschließend akzeptiert wird, um zu bestimmen, ob er in die Liste der durchlaufbaren Knoten aufgenommen werden soll:- Wenn der Rückgabewert
NodeFilter.FILTER_ACCEPTist, wird dieser Knoten einbezogen. - Wenn der Rückgabewert
NodeFilter.FILTER_REJECTist, wird kein Knoten im Teilbaum basierend auf diesem Knoten einbezogen. - Wenn der Rückgabewert
NodeFilter.FILTER_SKIPist, wird dieser Knoten nicht einbezogen.
- Wenn der Rückgabewert
Rückgabewert
Ein neues TreeWalker-Objekt.
Beispiele
>Verwendung von whatToShow
Dieses Beispiel verwendet whatToShow, um Textinhalte in Großbuchstaben zu verwandeln. Beachten Sie, dass die Textknoten der Nachkommen des #root-Elements ebenfalls durchlaufen werden, obwohl sie keine Kindknoten des #root-Elements sind.
HTML
<div id="root">
This is a text node.
<span>And this is a <code>span</code> element.</span>
</div>
CSS
span {
background-color: aqua;
}
JavaScript
const treeWalker = document.createTreeWalker(
document.querySelector("#root"),
NodeFilter.SHOW_TEXT,
);
while (treeWalker.nextNode()) {
const node = treeWalker.currentNode;
node.data = node.data.toUpperCase();
}
Ergebnis
Verwendung von filter
Dieses Beispiel verwendet filter, um Textinhalte zu maskieren. Für jeden Textknoten werden seine Inhalte mit encodeURI() maskiert, wenn es ein Nachkomme eines .escape-Elements ist, aber nicht eines .no-escape-Elements.
HTML
<div>
<div>
This is not escaped. <span class="escape">But this is escaped.</span>
</div>
<div class="escape">This is escaped.</div>
<div class="no-escape">This is not escaped.</div>
</div>
<hr />
<div class="escape">
<div>
This is escaped. <span class="no-escape">But this is not escaped.</span>
</div>
<div class="no-escape">This is not escaped.</div>
</div>
<hr />
<div class="no-escape">
<div>This is not escaped.</div>
<div class="escape">This is not escaped.</div>
</div>
CSS
.escape {
border: dashed;
}
.no-escape {
border: solid;
}
JavaScript
const treeWalker = document.createTreeWalker(
document.body,
NodeFilter.SHOW_ELEMENT,
(node) =>
node.classList.contains("no-escape")
? NodeFilter.FILTER_REJECT
: node.closest(".escape")
? NodeFilter.FILTER_ACCEPT
: NodeFilter.FILTER_SKIP,
);
while (treeWalker.nextNode()) {
for (const node of treeWalker.currentNode.childNodes) {
if (node.nodeType === Node.TEXT_NODE && /\S/.test(node.data)) {
// Exclude whitespace-only text nodes
node.data = encodeURI(node.data.replace(/\s+/g, " "));
}
}
}
Ergebnis
Spezifikationen
| Spezifikation |
|---|
| DOM> # dom-document-createtreewalker> |
Browser-Kompatibilität
Siehe auch
TreeWalker: Verwandte Schnittstelle