Dokumentation: createTreeWalker() Methode
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
Die Document.createTreeWalker()
Erzeugungsmethode gibt ein neu erstelltes TreeWalker
-Objekt zurück.
Syntax
createTreeWalker(root)
createTreeWalker(root, whatToShow)
createTreeWalker(root, whatToShow, filter)
Parameter
root
-
Ein
Node
, der die Wurzel desTreeWalker
-Objekts darstellt und den Anfangswert vonTreeWalker.currentNode
bildet. whatToShow
Optional-
Ein
unsigned long
, das eine Bitmaske darstellt, die durch das Kombinieren der Konstanten-Eigenschaften vonNodeFilter
erstellt wurde. Dies ist ein praktischer Weg, um für bestimmte Arten von Knoten zu filtern. Standardmäßig ist0xFFFFFFFF
eingestellt, was derNodeFilter.SHOW_ALL
-Konstanten entspricht.Konstante Numerischer Wert Beschreibung NodeFilter.SHOW_ALL
0xFFFFFFFF
Zeigt alle Knoten an. NodeFilter.SHOW_ATTRIBUTE
0x2
Zeigt Attr
-Knoten an.NodeFilter.SHOW_CDATA_SECTION
0x8
Zeigt CDATASection
-Knoten an.NodeFilter.SHOW_COMMENT
0x80
Zeigt Comment
-Knoten an.NodeFilter.SHOW_DOCUMENT
0x100
Zeigt Document
-Knoten an.NodeFilter.SHOW_DOCUMENT_FRAGMENT
0x400
Zeigt DocumentFragment
-Knoten an.NodeFilter.SHOW_DOCUMENT_TYPE
0x200
Zeigt DocumentType
-Knoten an.NodeFilter.SHOW_ELEMENT
0x1
Zeigt Element
-Knoten an.NodeFilter.SHOW_ENTITY
Veraltet0x20
Veraltet, nicht mehr wirksam. NodeFilter.SHOW_ENTITY_REFERENCE
Veraltet0x10
Veraltet, nicht mehr wirksam. NodeFilter.SHOW_NOTATION
Veraltet0x800
Veraltet, nicht mehr wirksam. NodeFilter.SHOW_PROCESSING_INSTRUCTION
0x40
Zeigt ProcessingInstruction
-Knoten an.NodeFilter.SHOW_TEXT
0x4
Zeigt Text
-Knoten an.Hinweis: Da der Elter von jedem
Attr
-Knoten immernull
ist, werdenTreeWalker.nextNode()
undTreeWalker.previousNode()
niemals einenAttr
-Knoten zurückgeben. UmAttr
-Knoten zu durchlaufen, verwenden Sie stattdessenElement.attributes
. filter
Optional-
Eine Callback-Funktion oder ein Objekt mit einer
acceptNode()
-Methode, dieNodeFilter.FILTER_ACCEPT
,NodeFilter.FILTER_REJECT
oderNodeFilter.FILTER_SKIP
zurückgibt. Die Funktion oder Methode wird für jeden Knoten im Teilbaum basierend aufroot
aufgerufen, der als eingeschlossen durch daswhatToShow
-Flag akzeptiert wird, um zu bestimmen, ob er in die Liste der durchlaufbaren Knoten aufgenommen wird:- Wenn der Rückgabewert
NodeFilter.FILTER_ACCEPT
ist, wird dieser Knoten eingeschlossen. - Wenn der Rückgabewert
NodeFilter.FILTER_REJECT
ist, wird jeder Knoten im Teilbaum basierend auf diesem Knoten nicht eingeschlossen. - Wenn der Rückgabewert
NodeFilter.FILTER_SKIP
ist, wird dieser Knoten nicht eingeschlossen.
- Wenn der Rückgabewert
Rückgabewert
Ein neues TreeWalker
-Objekt.
Beispiele
Verwendung von whatToShow
Dieses Beispiel verwendet whatToShow
, um Textinhalte in Großbuchstaben zu transformieren. 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 wird sein Inhalt mit encodeURI()
maskiert, wenn er ein Nachkomme eines .escape
-Elements, aber nicht eines .no-escape
-Elements ist.
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
Specification |
---|
DOM # dom-document-createtreewalker |
Browser-Kompatibilität
Siehe auch
TreeWalker
: Verwandte Schnittstelle