語法
js
createTreeWalker(root)
createTreeWalker(root, whatToShow)
createTreeWalker(root, whatToShow, filter)
引數
根-
一個
Node,代表TreeWalker物件的根,它是TreeWalker.currentNode的初始值。 whatToShow可選-
一個
unsigned long,代表透過組合NodeFilter的常量屬性建立的位掩碼。這是一種篩選特定節點型別的便捷方法。它預設為0xFFFFFFFF,代表NodeFilter.SHOW_ALL常量。常量 數值 描述 NodeFilter.SHOW_ALL0xFFFFFFFF顯示所有節點。 NodeFilter.SHOW_ATTRIBUTE0x2顯示 Attr節點。NodeFilter.SHOW_CDATA_SECTION0x8顯示 CDATASection節點。NodeFilter.SHOW_COMMENT0x80顯示 Comment節點。NodeFilter.SHOW_DOCUMENT0x100顯示 Document節點。NodeFilter.SHOW_DOCUMENT_FRAGMENT0x400顯示 DocumentFragment節點。NodeFilter.SHOW_DOCUMENT_TYPE0x200顯示 DocumentType節點。NodeFilter.SHOW_ELEMENT0x1顯示 Element節點。NodeFilter.SHOW_ENTITY已棄用0x20舊版,不再有效。 NodeFilter.SHOW_ENTITY_REFERENCE已棄用0x10舊版,不再有效。 NodeFilter.SHOW_NOTATION已棄用0x800舊版,不再有效。 NodeFilter.SHOW_PROCESSING_INSTRUCTION0x40顯示 ProcessingInstruction節點。NodeFilter.SHOW_TEXT0x4顯示 Text節點。注意:由於任何
Attr節點的父節點始終是null,TreeWalker.nextNode()和TreeWalker.previousNode()將永遠不會返回Attr節點。要遍歷Attr節點,請改用Element.attributes。 filter可選-
一個回撥函式或一個帶有
acceptNode()方法的物件,它返回NodeFilter.FILTER_ACCEPT、NodeFilter.FILTER_REJECT或NodeFilter.FILTER_SKIP。該函式或方法將針對root處的子樹中的每個節點呼叫,這些節點被whatToShow標誌接受為包含在內,以確定是否將其包含在可迭代節點列表中。- 如果返回值為
NodeFilter.FILTER_ACCEPT,則包含此節點。 - 如果返回值為
NodeFilter.FILTER_REJECT,則不包含此節點處子樹中的任何節點。 - 如果返回值為
NodeFilter.FILTER_SKIP,則不包含此節點。
- 如果返回值為
返回值
一個新的 TreeWalker 物件。
示例
使用 whatToShow
此示例使用 whatToShow 將文字內容轉換為大寫。請注意,即使 #root 元素的後代文字節點不是 #root 元素的子節點,它們也會被遍歷。
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();
}
結果
使用 filter
此示例使用 filter 轉義文字內容。對於任何文字節點,如果它是 .escape 元素的後代但不是任何 .no-escape 元素的後代,則其內容將使用 encodeURI() 進行轉義。
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, " "));
}
}
}
結果
規範
| 規範 |
|---|
| DOM # dom-document-createtreewalker |
瀏覽器相容性
載入中…
另見
TreeWalker:相關介面