Document:createNodeIterator() 方法

Document.createNodeIterator() 方法返回一个新的 NodeIterator 对象。

语法

js
createNodeIterator(root)
createNodeIterator(root, whatToShow)
createNodeIterator(root, whatToShow, filter)

参数

root

NodeIterator 遍历起始处的根节点。

whatToShow 可选

是一个可选的无符号长整型(unsigned long),是由节点过滤器(NodeFilter)中的常量属性定义的位掩码。这是筛选特定类型节点的便捷方式。其默认值是 0xFFFFFFFF,代表 SHOW_ALL 常量。

常量 数字值 描述
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 节点。
filter 可选

一个回调函数或一个具有 acceptNode() 方法的对象。从根节点开始到子树中的每个节点都会调用一次该函数或方法,哪些节点需要进入迭代节点列表等待调用则取决于 whatToShow 标志。该方法需要返回下列常量之一:NodeFilter.FILTER_ACCEPTNodeFilter.FILTER_REJECTNodeFilter.FILTER_SKIP。参见示例

返回值

一个新的 NodeIterator 对象。

示例

js
const nodeIterator = document.createNodeIterator(
  document.body,
  NodeFilter.SHOW_ELEMENT,
  (node) =>
    node.nodeName.toLowerCase() === "p"
      ? NodeFilter.FILTER_ACCEPT
      : NodeFilter.FILTER_REJECT,
);
const pars = [];
let currentNode;

while ((currentNode = nodeIterator.nextNode())) {
  pars.push(currentNode);
}

相同,但使用具有 acceptNode() 方法的对象:

js
const nodeIterator = document.createNodeIterator(
  document.body,
  NodeFilter.SHOW_ELEMENT,
  {
    acceptNode(node) {
      return node.nodeName.toLowerCase() === "p"
        ? NodeFilter.FILTER_ACCEPT
        : NodeFilter.FILTER_REJECT;
    },
  },
);
const pars = [];
let currentNode;

while ((currentNode = nodeIterator.nextNode())) {
  pars.push(currentNode);
}

规范

Specification
DOM Standard
# dom-document-createnodeiterator

浏览器兼容性

BCD tables only load in the browser