Document.createNodeIterator()

返回一个新的 NodeIterator 对象。

语法

const nodeIterator = document.createNodeIterator(root[, whatToShow[, filter]]);

参数

root
 NodeIterator遍历起始处的根节点。
whatToShow 可选
是一个可选的无符号长整型(unsigned long), 是由节点过滤器(NodeFilter)中的常量属性定义的位掩码。这是筛选特定类型节点的便捷方式。其默认值是 0xFFFFFFFF ,代表 SHOW_ALL 常量。
常量 数字值 描述
NodeFilter.SHOW_ALL -1 (即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 显示 Entity 节点。 这仅在创建以Entity实体节点为根节点的TreeWalker时有意义;在这种情况下,这意味着该实体节点会出现在迭代或遍历的第一位。因为实体节点不会是其他节点的子代,遍历文档树时,实体节点不会出现。
NodeFilter.SHOW_ENTITY_REFERENCE 16 显示 EntityReference 节点。
NodeFilter.SHOW_NOTATION 2048 显示 Entity 节点。 这仅在创建以Notation符号节点为根节点的TreeWalker时有意义;在这种情况下,这意味着该符号节点会出现在迭代或遍历的第一位。因为符号节点不会是其他节点的子代,遍历文档树时,符号节点不会出现。
NodeFilter.SHOW_PROCESSING_INSTRUCTION 64 显示 ProcessingInstruction 节点。
NodeFilter.SHOW_TEXT 4 显示 Text 节点。
filter 可选
是实现 NodeFilter 接口的对象; 其 acceptNode() 方法会对从根节点开始到子树中的每个节点都调用一次,哪些节点需要进入迭代节点列表等待调用则取决于whatToShow参数(也可以使用一个简单的回调函数代替acceptNode())。该方法需要返回下列常量之一: NodeFilter.FILTER_ACCEPT ,NodeFilter.FILTER_REJECTNodeFilter.FILTER_SKIP(见NodeFilter),参见示例
注意: 在Gecko12.0(Firefox 12.0 / Thunderbird 12.0 / SeaMonkey 2.9)以前,这个方法接收第四个可选的参数(entityReferenceExpansion),这不是DOM4 规范中的一部分,因此被移除了。这个参数表示实体引用节点的子代对于迭代器是否可见。因为浏览器不会创建这样的节点,这个参数没有任何作用。

示例

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
document.createNodeIterator
Living Standard

浏览器兼容性

Update compatibility data on GitHub
DesktopMobile
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidFirefox for AndroidOpera for AndroidSafari on iOSSamsung Internet
createNodeIteratorChrome Full support 1Edge Full support 12Firefox Full support 3.5IE Full support 9Opera Full support 9Safari Full support 3WebView Android Full support YesChrome Android Full support YesFirefox Android Full support YesOpera Android Full support YesSafari iOS Full support YesSamsung Internet Android Full support Yes

Legend

Full support  
Full support