Posted by をかもと at 2007年11月14日 水曜日

id:amachang がリリースした JavaScript-XPath が、かなり良さげ。
JavaScript-XPath の検索結果を jQuery オブジェクトにして、利用できると便利そうなので、以下のようなコードを書いてみた。

(function(jQuery){
 jQuery.xpath = function(selector, context){
  context = context || jQuery(document);
  var r, res=[];
  context.each(function() {
   r = document.evaluate(selector, this, null, 7, null);
   for(var node_no=0; node_no<r.snapshotLength; node_no++){
    res.push(r.snapshotItem(node_no));
   }
  });
  return new jQuery(res);
 };
 jQuery.extend(jQuery.prototype, {xpath: function(selector){return jQuery.xpath(selector, this);}});
})(jQuery);
var $x = jQuery.xpath;

これで、jQueryオブジェクト.xpath() または $x() を介して JavaScript-XPath 検索結果を jQuery オブジェクトとして利用することができる。
使い方は jQueryオブジェクト.xpath("XPath 文字列") または $x("XPath 文字列", jQueryオブジェクト)
$x() の第2引数は省略可能で、検索範囲を限定したい場合にセットしてください。

例えば <div id="content"></div> の中から <a href="hogehoge.jpg" rel="lightbox"></a> な要素を抽出したい場合は。

$('#content').xpath('.//a[@rel="lightbox"]')
// または
$x('id("content")').xpath('.//a[@rel="lightbox"]')
// または
$x('//div[@id="content"]//a[@rel="lightbox"]')

と書けばよい。
jQuery オブジェクトを返すので、あとはご自由に。

と思ったら、ご本人もjQuery や Prototype.js にバインディングさせる方法を考えておられるようですね。
では、ちょっと待ちますか (^^;;


2007年11月18日:追記
早速出ましたね、jQuery用プラグイン。仕事が速いなぁ。使い勝手も良さげ。
JavaScript-XPath の jQuery 用のプラグインと Prototype.js 用のプラグインを公開しました – IT戦記

コメント

  • twitter 2007年11月14日 水曜日 3:05 PM

    [pookmark] JavaScript-XPath ? jQuery ? : ????????????? http://tinyurl.com/286tdv

  • hatena bookmark 2007年11月14日 水曜日 6:11 PM

    JavaScript-XPath + jQuery。

  • hatena bookmark 2007年11月15日 木曜日 2:33 AM

    jQueryにXPathでの要素取得メッソドを追加する

  • hatena bookmark 2007年11月15日 木曜日 9:02 PM

    今が旬のスクリプトを、jQueryのプラグインに。/空気読まないで言うと、なんでわざわざjQueryにXPathの機能を(さらに)付与するのか、わからない。/ネイティブに実装しているブラウザだと速い、ということかな?

  • hatena bookmark 2007年11月18日 日曜日 4:03 PM

    JavaScript-XPath の検索結果を jQuery オブジェクトにして、利用できると便利そうなので、以下のようなコードを書いてみた

コメントする


Twitter ID を入力すると新しいコメントがあった際、 @dogmap_jp が、あなた宛に@リプライでお知らせします。

入力いただいたメールアドレスから、TwitterGravatar に登録されているアイコンを表示します。
(メールアドレスは公開されません)

改行と段落タグは自動で挿入されます。メールアドレスは表示されません。

:mrgreen: :-P :-D :-) ;-) :-o :-| :-( 8-O :-? 8-) :twisted: :evil: :oops: :roll: :cry: :lol: :-x more »