2007年 11月 14日

$X の問題と解決と type 指定

なんで変更したか忘れそうなのでメモ ( http://coderepos.org/share/browser/websites/coderepos.org/trac/share/js/TracUtils.js#L77 )

ずっとつかってた $X はノードセットとりたいときに二回 expr.evaluate するダサい問題があるので (書いたときは XPath はやいしー GM だしーいっかーって思ってた)。js-xpath もでたことだし、他のところでも使っていきたいのでとりあえず以下の方法で解決した。

  • type 指定を導入
    • ECMAScript 側で受けとりたい型を指定する。 (Array, String...)
    • XPathResult.BOOLEAN_TYPE とか指定するのはめんどいし覚えられない。
  • type 指定なしの場合は UNORDERED_NODE_ITERATOR_TYPE をそのまま Array に変換してかえす
    • たぶんこれでも殆どの場合は問題ないと思う
    • ノード集合じゃない (number とか) ならそれぞれそのままかえす (いままでとおなじ)
  • type 指定で Array を指定した場合は ORDERED_NODE_SNAPSHOT_TYPE を Array に変換してかえす
    • UNORDERED なやつで特別問題がある場合つかう

おれは type 指定するの好きじゃないので (めんどい) 基本的に指定しなくても問題ないように