DOM

Document.createNodeIterator() メソッド

 編集:2022.09.02 by T.A.

新しい NodeIterator オブジェクトを返します。

構文
Document.createNodeIterator(root[, whatToShow[, filter]])
Document 実質 document でしょう。
root NodeIterator の探索の開始地点になるルート ノードです。
whatToShow 省略可。オプションの unsigned long 値で、 の定数プロパティを組み合わせて作られたビット マスクを表します。これは特定の種類のノードを絞り込みするのに便利な方法です。既定値は 0xFFFFFFFF で、SHOW_ALL 定数を表します。
定数 数値 説明
NodeFilter.SHOW_ALL -1(すなわち unsigned long の最大値) すべてのノードを表します。
NodeFilter.SHOW_ATTRIBUTE 非推奨 2 属性 Attr ノードを表します。

これは、 Attr ノードをルートとして NodeIterator を作成した場合にのみ意味を持ちます。この場合、その属性ノードが反復や探索の最初の位置に現れることを意味します。属性は他のノードの子ではないので、文書ツリーを探索しても現れません。

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 ノードをルートとして NodeIterator を作成した場合にのみ意味を持ちます。この場合、Entity ノードが探索の最初の位置に現れることを意味します。エンティティは文書ツリーの一部ではないので、文書ツリーを探索しても表されません。
NodeFilter.SHOW_ENTITY_REFERENCE 非推奨 16 EntityReference ノードを表します。
NodeFilter.SHOW_NOTATION 非推奨 2048 Notation ノードを表示します。これは、Notation ノードをルートとして NodeIterator を作成した場合にのみ意味を持ちます。この場合、Notation ノードが探索の最初の位置に現れることを意味します。Notation は文書ツリーの一部ではないので、文書ツリーを探索しても表されません。
NodeFilter.SHOW_PROCESSING_INSTRUCTION 64 ProcessingInstruction
NodeFilter.SHOW_TEXT 4 Text ノードを表します。
filter 省略可NodeFilter インターフェースを実装したオブジェクト。その acceptNode() メソッドは、反復可能なノードのリストに含めるかどうかを決定するために、whatToShow フラグによって含まれていると受け入れられたルートを基準としたサブ ツリーの各ノードに対して呼び出されます(代わりに単純なコールバック関数を使用することもできます)。このメソッドは NodeFilter.FILTER_ACCEPT、NodeFilter.FILTER_REJECT、NodeFilter.FILTER_SKIP のいずれかを返します。例を参照してください。

メモ: Gecko 12.0(Firefox 12.0/Thunderbird 12.0/SeaMonkey 2.9)より前の版では、このメソッドは DOM4 仕様の一部ではないオプションの 4 番目の引数(entityReferenceExpansion)を受け入れていました。この引数は、エンティティ参照ノードの子がイテレーターから見えるかどうかを示していました。このようなノードはブラウザーでは作成されないので、この引数は何の効果もありませんでした。

戻り値

NodeIterator

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

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

テスト