Document: phương thức createTreeWalker()
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.
Phương thức tạo Document.createTreeWalker() trả về một đối tượng TreeWalker mới được tạo.
Cú pháp
createTreeWalker(root)
createTreeWalker(root, whatToShow)
createTreeWalker(root, whatToShow, filter)
Tham số
root-
Một
Nodeđại diện cho gốc của đối tượngTreeWalker, đây là giá trị ban đầu củaTreeWalker.currentNode. whatToShowOptional-
Một
unsigned longđại diện cho một bitmask được tạo bằng cách kết hợp các hằng số củaNodeFilter. Đây là một cách thuận tiện để lọc các loại nút cụ thể. Mặc định là0xFFFFFFFF, đại diện cho hằng sốNodeFilter.SHOW_ALL.Hằng số Giá trị số Mô tả NodeFilter.SHOW_ALL0xFFFFFFFFHiển thị tất cả các nút. NodeFilter.SHOW_ATTRIBUTE0x2Hiển thị các nút Attr.NodeFilter.SHOW_CDATA_SECTION0x8Hiển thị các nút CDATASection.NodeFilter.SHOW_COMMENT0x80Hiển thị các nút Comment.NodeFilter.SHOW_DOCUMENT0x100Hiển thị các nút Document.NodeFilter.SHOW_DOCUMENT_FRAGMENT0x400Hiển thị các nút DocumentFragment.NodeFilter.SHOW_DOCUMENT_TYPE0x200Hiển thị các nút DocumentType.NodeFilter.SHOW_ELEMENT0x1Hiển thị các nút Element.NodeFilter.SHOW_ENTITYDeprecated0x20Legacy, không còn hiệu lực. NodeFilter.SHOW_ENTITY_REFERENCEDeprecated0x10Legacy, không còn hiệu lực. NodeFilter.SHOW_NOTATIONDeprecated0x800Legacy, không còn hiệu lực. NodeFilter.SHOW_PROCESSING_INSTRUCTION0x40Hiển thị các nút ProcessingInstruction.NodeFilter.SHOW_TEXT0x4Hiển thị các nút Text.Note: Hằng số
NodeFilter.SHOW_ATTRIBUTEchỉ có hiệu lực khi root là một nút thuộc tính. Vì cha của bất kỳ nútAttrnào luôn lànull,TreeWalker.nextNode()vàTreeWalker.previousNode()sẽ không bao giờ trả về một nútAttr. Để duyệt các nútAttr, hãy sử dụngElement.attributesthay thế. filterOptional-
Một hàm callback hoặc một đối tượng có phương thức
acceptNode(), trả vềNodeFilter.FILTER_ACCEPT,NodeFilter.FILTER_REJECThoặcNodeFilter.FILTER_SKIP. Hàm hoặc phương thức sẽ được gọi cho mỗi nút trong cây con dựa trênrootđược chấp nhận là được bao gồm bởi cờwhatToShowđể xác định xem có bao gồm nó trong danh sách các nút có thể duyệt hay không:- Nếu giá trị trả về là
NodeFilter.FILTER_ACCEPT, nút này được bao gồm. - Nếu giá trị trả về là
NodeFilter.FILTER_REJECT, bất kỳ nút nào trong cây con dựa trên nút này sẽ không được bao gồm. - Nếu giá trị trả về là
NodeFilter.FILTER_SKIP, nút này không được bao gồm.
- Nếu giá trị trả về là
Giá trị trả về
Một đối tượng TreeWalker mới.
Ví dụ
>Sử dụng whatToShow
Ví dụ này sử dụng whatToShow để chuyển đổi nội dung văn bản thành chữ hoa. Lưu ý rằng các nút văn bản của các phần tử con của phần tử #root cũng được duyệt mặc dù chúng không phải là các nút con của phần tử #root.
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();
}
Kết quả
Sử dụng filter
Ví dụ này sử dụng filter để escape nội dung văn bản. Đối với bất kỳ nút văn bản nào, nội dung của nó sẽ được escape bằng encodeURI() nếu nó là phần tử con của một phần tử .escape nhưng không phải của bất kỳ phần tử .no-escape nào.
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, " "));
}
}
}
Kết quả
Đặc tả kỹ thuật
| Specification |
|---|
| DOM> # dom-document-createtreewalker> |
Tương thích trình duyệt
Xem thêm
TreeWalker: Giao diện liên quan