・jsファイル
---------------------------------------------------------------------------
$("#button").click(function() {
$.ajax({
type: 'GET',
url: 'file.html',
dataType: 'html',
success: function (data) {
console.log($('div', $(data)));
},
});
});
---------------------------------------------------------------------------
・file.html
---------------------------------------------------------------------------
<div class="test">test</div>
---------------------------------------------------------------------------
ちなみに、以下のようにdiv.testをdivでさらに囲んでやると取得することが出来るようです。
---------------------------------------------------------------------------
<div class="wrap">
<div class="test">test</div>
</div>
---------------------------------------------------------------------------
jQueryのバージョンは1.11、ブラウザはSafari 7.05を使用しています。
どのようなスクリプトで最上層の要素を取得することができるのでしょうか?
単純に
$(data)
でいいと思うんですが、もしcontextを使った表現にしたいのであれば、
$(':first-child', $(data)).parent()
とか書けば取得できると思います。
単純に
$(data)
でいいと思うんですが、もしcontextを使った表現にしたいのであれば、
$(':first-child', $(data)).parent()
とか書けば取得できると思います。
context を利用しなくていいのであれば、フィルタでできると思います。
$('<div id="div1">div1</div><div id="div2" class="test">div2</div>').filter('div.test');
find()ばかり考えていましたが、filter()というメソッドがあったのですね。
勉強になりました。ありがとうございます。
探したい要素が、ルートにあるかどうかが分からない場合に、不便だな、ってことに気が付きました。
jQuery.load は、URL の最後に、空白で区切ってセレクタを書くことで、対象の一部を読み込めます。
http://api.jquery.com/load/#loading-page-fragments
以下は、jQuery 1.10.2 の jQuery.load の実装の抜粋です。
}).done(function( responseText ) { // Save response for use in complete callback response = arguments; self.html( selector ? // If a selector was specified, locate the right elements in a dummy div // Exclude scripts to avoid IE 'Permission Denied' errors jQuery("<div>").append( jQuery.parseHTML( responseText ) ).find( selector ) : // Otherwise use the full result responseText );
jQuery の実装にならって、こんな風にしてはどうでしょう。
$("#button").click(function() { $.ajax({ type: 'GET', url: 'file.html', dataType: 'html', success: function (data) { console.log($('.test', $('<div>').append(data))); }, }); });
こんなload()使い方があったのですね。
HTMLDocumentを生成せずともルートノードを作ってやることで、その子孫を検索できるというわけですね。
参考になりました。ありがとうございます。
context を利用しなくていいのであれば、フィルタでできると思います。
2014/08/18 09:46:05find()ばかり考えていましたが、filter()というメソッドがあったのですね。
2014/08/19 00:34:13勉強になりました。ありがとうございます。