树形遍历器

TreeWalker 对象表示文档子树的节点及其内部的位置。

可以使用 Document.createTreeWalker() 方法创建 TreeWalker

实例属性

此接口不继承任何属性。

TreeWalker.root 只读

返回创建 TreeWalker 时指定的根 Node

TreeWalker.whatToShow 只读

返回一个 unsigned long,它是一个位掩码,由描述必须呈现的 Node 类型常量组成。不匹配的节点将被跳过,但其子节点可能会被包含在内,如果相关的话。可能的值是

常量 数值 描述
NodeFilter.SHOW_ALL 4294967295(即 unsigned long 的最大值) 显示所有节点。
NodeFilter.SHOW_ATTRIBUTE 已弃用 2 显示属性 Attr 节点。这仅在使用 Attr 节点作为根创建 TreeWalker 时有意义。在这种情况下,这意味着属性节点将出现在迭代或遍历的第一个位置。由于属性永远不会是其他节点的子节点,因此在遍历文档树时它们不会出现。
NodeFilter.SHOW_CDATA_SECTION 已弃用 8 显示 CDATASection 节点。
NodeFilter.SHOW_COMMENT 128 显示 Comment 节点。
NodeFilter.SHOW_DOCUMENT 256 显示 Document 节点。
NodeFilter.SHOW_DOCUMENT_FRAGMENT 1024 显示 DocumentFragment 节点。
NodeFilter.SHOW_DOCUMENT_TYPE 512 显示 DocumentType 节点。
NodeFilter.SHOW_ELEMENT 1 显示 Element 节点。
NodeFilter.SHOW_ENTITY 已弃用 32 遗留,不再可用。
NodeFilter.SHOW_ENTITY_REFERENCE 已弃用 16 遗留,不再可用。
NodeFilter.SHOW_NOTATION 已弃用 2048 遗留,不再可用。
NodeFilter.SHOW_PROCESSING_INSTRUCTION 64 显示 ProcessingInstruction 节点。
NodeFilter.SHOW_TEXT 4 显示 Text 节点。
TreeWalker.filter 只读

返回与该 TreeWalker 关联的 NodeFilter,用于选择相关节点。

TreeWalker.currentNode

TreeWalker 当前指向的 Node

实例方法

此接口不继承任何方法。

注意:TreeWalker 的上下文中,如果节点存在于由 whatToShowfilter 参数参数确定的逻辑视图中,则该节点是可见的。(节点是否在屏幕上可见无关紧要。)

TreeWalker.parentNode()

将当前 Node 移动到文档顺序中第一个可见的祖先节点,并返回找到的节点。它还将当前节点移动到该节点。如果没有这样的节点,或者它在对象构造时定义的根节点之前,则返回 null,并且不会更改当前节点。

TreeWalker.firstChild()

将当前 Node 移动到当前节点的第一个可见的子节点,并返回找到的子节点。它还将当前节点移动到该子节点。如果没有这样的子节点,则返回 null,并且不会更改当前节点。请注意,firstChild() 返回的节点取决于在实例化 TreeWalker 对象时设置的 whatToShow 值。假设以下 HTML 树,如果您将 whatToShow 设置为 NodeFilter.SHOW_ALL,则对 firstChild() 的调用将返回一个 Text 节点,而不是 HTMLDivElement 对象。

html
<!DOCTYPE html>
<html lang="en">
  <head><title>Demo</title>
  <body>
    <div id="container"></div>
  </body>
</html>
js
let walker = document.createTreeWalker(document.body, NodeFilter.SHOW_ALL);
let node = walker.firstChild(); // nodeName: "#text"

但如果我们这样做

js
let walker = document.createTreeWalker(
  document.body,
  NodeFilter.SHOW_ELEMENT,
);
let node = walker.firstChild(); // nodeName: "DIV"

同样适用于 nextSibling()previousSibling()firstChild()lastChild()

TreeWalker.lastChild()

将当前 Node 移动到当前节点的最后一个可见的子节点,并返回找到的子节点。它还将当前节点移动到该子节点。如果没有这样的子节点,则返回 null,并且不会更改当前节点。

TreeWalker.previousSibling()

将当前 Node 移动到其前面的兄弟节点(如果有),并返回找到的兄弟节点。如果没有这样的节点,则返回 null,并且不会更改当前节点。

TreeWalker.nextSibling()

将当前 Node 移动到其后面的兄弟节点(如果有),并返回找到的兄弟节点。如果没有这样的节点,则返回 null,并且不会更改当前节点。

TreeWalker.previousNode()

将当前 Node 移动到文档顺序中前一个可见的节点,并返回找到的节点。它还将当前节点移动到该节点。如果没有这样的节点,或者它在对象构造时定义的根节点之前,则返回 null,并且不会更改当前节点。

TreeWalker.nextNode()

将当前 Node 移动到文档顺序中下一个可见的节点,并返回找到的节点。它还将当前节点移动到该节点。如果没有这样的节点,则返回 null,并且不会更改当前节点。

规范

规范
DOM 标准
# interface-treewalker

浏览器兼容性

BCD 表仅在浏览器中加载

另请参见