TreeWalkerNN 7 IE なし DOM 2

TreeWalker オブジェクトは、document.createTreeWalker() メソッドで定義された基準を満たしているノードの動的な階層リストです。このリストは、アイテムの親子階層と、そのアイテムがポイントするノードの親子階層が同じであることを前提としています。createTreeWalker() メソッドは、フィルタリングを通じて、リストの開始位置となるノード、およびリストから除外されるノード (またはノードクラス) を明示します。

 

TreeWalker オブジェクトにはリスト内に一種のポインタがあるため、スクリプトにはポインタが必要ありません。このオブジェクトのメソッドでは、リスト内の前後のノード (または兄弟ノード、子ノード、親ノード) にスクリプトでアクセスし、ユーザーがメソッドで指定した方向にポインタを移動することができます。TreeWalker を作成した後に、スクリプトでドキュメントツリーを変更した場合、その変更は、TreeWalker 内のノード順序に自動的に反映されます。

 

TreeWalker は HTML ドキュメントでも十分に有用ですが、XML データドキュメントではその意義が一層高まります。たとえば、W3C DOM では、特定の属性名を持つ要素すべてに素早くアクセスする方法が規定されていません。なお、この方法は XPATH 標準ではサーバー上で簡単に実現します。TreeWalker を定義すれば、目的の属性を持つノードだけをポイントして、そのノードに順番に素早くアクセスすることができます。つまり、すべてのノードに対してループを実行して目的の要素を見つけるという煩雑なスクリプトを記述する必要がなくなります。一例として、次のフィルタ関数では、author 属性を含むノードだけを TreeWalker オブジェクトのメンバーに加えることができます。

 
function authorAttrFilter(node) {
    if (node.hasAttribute("author")) {
        return NodeFilter.FILTER_ACCEPT;
    }
    return NodeFilter.FILTER_SKIP;
}
 

この関数への参照は createTreeWalker() メソッドに対するパラメータとなり、また、リストを要素ノードのみに限定します。

 
var authorsOnly = document.createTreeWalker(document,
NodeFilter.SHOW_ELEMENT, authorAttrFilter, false);
 

その後、TreeWalker オブジェクトのメソッドを呼び出して、リスト内のいずれか 1 つのノードへの参照を取得できます。メソッドを呼び出すと、TreeWalker オブジェクトは、メソッドで指定された方向にある内部ポインタの現在位置を基準とした候補ノードにフィルタを適用します。メソッドとフィルタの基準を満たす次のドキュメントツリーノードが返されます。このノードへの参照を取得すれば、TreeWalker リスト内のアイテムには関わりなく、あらゆる DOM ノードのプロパティやメソッドにアクセスしてノードを操作できるようになります。

 
オブジェクト参照
 
TreeWalkerReference
 
オブジェクト固有のプロパティ
 
currentNodeexpandEntityReferencefilterrootwhatToShow
 
オブジェクト固有のメソッド
 
firstChild()lastChild()nextNode()nextSibling()
parentNode()previousNode()previousSibling()
 
オブジェクト固有のイベントハンドラープロパティ

なし

 
currentNodeNN 7 IE なし DOM 2

読み書き

TreeWalker のポインタがあるノードへの参照を返します。ここで重要なのは、このプロパティにドキュメントツリーノードへの参照を割り当てると、ポインタの新しい位置を手動で設定できるという点です。割り当てたノードが、{来であればリストから除外されるノードであっても、ノードが除外されていない場合と同様に、その位置から次のメソッドが呼び出されます。

 
 
myTreeWalker.currentNode = document.getElementById("main");
 

ドキュメントツリーノードへの参照

 
既定値

ドキュメントの最初のノード

 
expandEntityReference、filter、root、whatToShowNN 7 IE なし DOM 2

読み取り専用

これら 4 つのオブジェクトは、オブジェクト作成時に document.createTreeWalker() メソッドに渡されるパラメータ値を反映しています。

 
firstChild()、lastChild()、nextSibling()、parentNode()、previousSibling()NN 7 IE なし DOM 2

これらのメソッドは、TreeWalker オブジェクトのアイテム階層内にあるノードへの参照を返します。ノード間の親子関係は、ドキュメントツリー内のノードの親子関係と同じです。これらのいずれかのメソッドを呼び出すと、TreeWalker の内部ポインタが TreeWalker リスト内でそのノードのスポットの隣に移動します。参照に対応するノードが存在しない場合は、null が返されます。このため、ノードのプロパティを読み取る際には、あらかじめノードが存在するかどうかを確認しておく必要があります。

 
if (myTreeWalker.nextSibling()) {
    var theTag = myTreeWalker.currentNode.tagName;
}
 

参照が null となるプロパティを直接参照すると (たとえば myTreeWalker.nextSibling().tagName など)、参照エラーが発生します。

 
戻り値

ドキュメントツリーノードへの参照

 
パラメータ

なし

 
nextNode()、previousNode()NN 7 IE なし DOM 2

内部の NodeIterator ポインタを、1 つ前 (nextNode())、または 1 つ後ろ (previousNode()) に移動させ、ポインタが通過したノードへの参照を返します。この 2 つのメソッドは、NodeIterator オブジェクトと同様に、階層が平坦であるかのように動作します。

 
戻り値

ドキュメントツリー内のノードへの参照

 
パラメータ

なし