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 之一。请参阅 示例

对于 createNodeIterator,值 NodeFilter.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);
}

规范

规范
DOM 标准
# dom-document-createnodeiterator

浏览器兼容性

BCD 表格仅在启用了 JavaScript 的浏览器中加载。