TreeWalker
==========

**`TreeWalker`** オブジェクトは、文書のサブツリーのノードおよびその位置を表します。

`TreeWalker` は `document` オブジェクトの `Document.createTreeWalker()` (en-US) メソッドを使用して作成可能です。

プロパティ
-----

*このインターフェイスが継承するプロパティはありません。*

`TreeWalker.root` 読取専用 

`TreeWalker` を作成したときに指定したルートノードを表す `Node` を返します。

`TreeWalker.whatToShow` (en-US) 読取専用 

提供しなければならない `Node` の型を表す定数で構成されるビットマスクである `unsigned long` を返します。一致しないノードはスキップされますが、その子は関連があれば含まれます。使用できる値は以下のとおりです。

| 定数 | 数値 | 説明 |
| --- | --- | --- |
| `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` ノードを表示します。 |

`TreeWalker.filter` (en-US) 読取専用 

関連するノードを選択するために使用した `NodeFilter` (en-US) を返します。

`TreeWalker.currentNode` (en-US)

`TreeWalker` の現在の位置の `Node` です。

メソッド
----

*このインターフェイスが継承しているメソッドはありません。*

**メモ:** `TreeWalker` のコンテキストでは、 `whatToShow` と `filter` 引数で決定される論理ビューにノードが存在する場合、ノードは*可視状態*となります。(ノードが画面上に表示されているかどうかは関係ありません)。

`TreeWalker.parentNode()` (en-US)

現在の `Node` を文書内の順序で最初の*可視状態*である祖先ノードに移動して、発見したノードを返します。また、現在のノードをこの位置に移動します。該当するノードがない、あるいはオブジェクト生成時に定義した*ルートノード*より前にある場合は、`null` を返して現在のノードは変更しません。

`TreeWalker.firstChild()` (en-US)

現在の `Node` を現在のノードで最初の*可視状態*である子に移動して、発見した子ノードを返します。また、現在のノードをこの子ノードに移動します。該当する子がない場合は、`null` を返して現在のノードは変更しません。なお、 `firstChild()` が返すノードは、 `TreeWalker` オブジェクトのインスタンス化時に設定された `whatToShow` の値に依存することに注意してください。次のような HTML ツリーを想定して、 `whatToShow` を `NodeFilter.SHOW_ALL` に設定して `firstChild()` を呼び出すと、`HTMLDivElement` オブジェクトではなく `Text` ノードが返されます。


```html
<!DOCTYPE html>
<html>
  <head><title>Demo</title>
  <body>
    <div id="container"></div>
  </body>
</html>
```



```js
let walker = document.createTreeWalker(document.body, NodeFilter.SHOW\_ALL);
let node = walker.firstChild(); // nodeName: "#text"
```


しかし、次のようにすることができます。


```js
let walker = document.createTreeWalker(
  document.body,
  NodeFilter.SHOW\_ELEMENT,
);
let node = walker.firstChild(); // nodeName: "DIV"
```


同じことが `nextSibling()`, `previousSibling()`, `firstChild()`, `lastChild()` でも言えます。

`TreeWalker.lastChild()` (en-US)

現在の `Node` を現在のノードで最後の*可視状態*である子に移動して、発見した子ノードを返します。また、現在のノードをこの子ノードに移動します。該当する子がない場合は、`null` を返して現在のノードは変更しません。

`TreeWalker.previousSibling()` (en-US)

現在の `Node` を前の兄弟に移動して、発見した兄弟ノードを返します。該当するノードがない場合は、 `null` を返して現在のノードは変更しません。

`TreeWalker.nextSibling()` (en-US)

現在の `Node` を次の兄弟に移動して、発見した兄弟ノードを返します。該当するノードがない場合は、 `null` を返して現在のノードは変更しません。

`TreeWalker.previousNode()` (en-US)

現在の `Node` を文書内の順序で前の*可視状態である*ノードに移動して、発見したノードを返します。また、現在のノードをこの位置に移動します。該当するノードがない、あるいはオブジェクト生成時に定義した*ルートノード*より前にある場合は、`null` を返して現在のノードは変更しません。

`TreeWalker.nextNode()` (en-US)

現在の `Node` を文書内の順序で次の*可視状態である*ノードに移動して、発見したノードを返します。また、現在のノードをこの位置に移動します。該当するノードがない場合は、`null` を返して現在のノードは変更しません。

仕様書
---

| Specification |
| --- |
| DOM Standard # interface-treewalker |

ブラウザーの互換性
---------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

関連情報
----

* 作成するメソッド: `Document.createTreeWalker()` (en-US)
* 関連インターフェイス: `NodeFilter` (en-US), `NodeIterator`