IE用にTreeWalker.js書いた
まずは、ぺたり。http://github.com/TakiTake/js/tree/master
使うと、何が嬉しいの?
IEでDOM Traversal関数が使えるので、DOMツリーの探索が容易になります。
XPathとどう違う?
XPathは、条件に合うノードをガッと一気に取ってきます。
TreeWalkerは、DOMツリーを移動しながらノードを取得するので必要なノードだけ取得するのに向いている。
ある要素に子ノードが100個あって、子ノードの50番から60番の間にある特定の子孫ノード取ってきたい!なんてときに使えるのではないかと。
使用例
// FILTER_ACCEPTされたノードがnextNodeととして返る filter = { acceptNode: function (node) { // tという文字を含むテキストノードなら取得 if (node.nodeValue.match(/t/)) return NodeFilter.FILTER_ACCEPT; else return NodeFilter.FILTER_SKIP; } }; treeWalker = document.createTreeWalker( document.body, // 探索対象とする部分ノードの頂点 NodeFilter.SHOW_TEXT, // テキストノードだけを探索する filter, // ノード探索用フィルター(上記) false // 実体参照を展開しない ); // bodyの50番目の子ノードから探索開始 treeWalker.currentNode = document.body.childNodes.item(50); // nextNode関数を呼ぶ度にツリーを移動する。 // 移動先は、フィルターの条件に合うノードまで。 while (treeWalker.nextNode() != null) { // 現在のノードの親がbodyの61番目の子ノードなら探索終了 if (treeWalker.currentNode.parentNode == document.body.childNodes.item(61)) breake; console.log(treeWalker.currentNode); }