文件:createNodeIterator() 方法

Baseline 已廣泛支援

此特性已相當成熟,可在許多裝置和瀏覽器版本上使用。自 ⁨2015 年 7 月⁩以來,各瀏覽器均已提供此特性。

Document.createNodeIterator() 方法返回一個新的 NodeIterator 物件。

語法

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

引數

作為 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

瀏覽器相容性