Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

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 ⁨Juli 2015⁩.

Die Document.createTreeWalker() Erzeugungsmethode gibt ein neu erstelltes TreeWalker-Objekt zurück.

Syntax

js
createTreeWalker(root)
createTreeWalker(root, whatToShow)
createTreeWalker(root, whatToShow, filter)

Parameter

root

Ein Node, der die Wurzel des TreeWalker-Objekts darstellt und den Anfangswert von TreeWalker.currentNode bildet.

whatToShow Optional

Ein unsigned long, das eine Bitmaske darstellt, die durch das Kombinieren der Konstanten-Eigenschaften von NodeFilter erstellt wurde. Dies ist ein praktischer Weg, um für bestimmte Arten von Knoten zu filtern. Standardmäßig ist 0xFFFFFFFF eingestellt, was der NodeFilter.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 Veraltet 0x20 Veraltet, nicht mehr wirksam.
NodeFilter.SHOW_ENTITY_REFERENCE Veraltet 0x10 Veraltet, nicht mehr wirksam.
NodeFilter.SHOW_NOTATION Veraltet 0x800 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 immer null ist, werden TreeWalker.nextNode() und TreeWalker.previousNode() niemals einen Attr-Knoten zurückgeben. Um Attr-Knoten zu durchlaufen, verwenden Sie stattdessen Element.attributes.

filter Optional

Eine Callback-Funktion oder ein Objekt mit einer acceptNode()-Methode, die NodeFilter.FILTER_ACCEPT, NodeFilter.FILTER_REJECT oder NodeFilter.FILTER_SKIP zurückgibt. Die Funktion oder Methode wird für jeden Knoten im Teilbaum basierend auf root aufgerufen, der als eingeschlossen durch das whatToShow-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.

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

html
<div id="root">
  This is a text node.
  <span>And this is a <code>span</code> element.</span>
</div>

CSS

css
span {
  background-color: aqua;
}

JavaScript

js
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

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

css
.escape {
  border: dashed;
}
.no-escape {
  border: solid;
}

JavaScript

js
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