jQuery.ajax()
メソッドを使用する場合、返されるデータをフィルタリングして必要なものを正確に取得するのに苦労しています。私はこれが.load()
とおそらく他のjQuery AJAXメソッドを使用して簡単にできることを知っていますが、特に.ajax()
を使用する必要があります。
たとえば、私はこれが機能することを知っています。
var title = $(data).filter('title'); // Returns the page title
しかし、id = "foo"のdivのコンテンツが必要な場合はどうなりますか?
var foo = $(data).filter('#foo'); // None of these work
var foo = $(data).find('#foo'); //
var foo = $('#foo', data); //
理想的には、タイトル、div、またはjQueryが選択できるその他の要素を選択するために機能する通常のjQueryセレクターを渡すことができる1つのメソッドが必要です。これは、任意の文字列を自分のajax関数に渡すことができるようにするためです。
myApp.ajax({
url: 'myPage.html',
filterTitle: 'title',
filterContent: '#main-content'
});
どんな助けでも大歓迎です。
filter()
とfind()
のどちらを使用するかは、取得したHTMLページの構造によって異なります。たとえば、これが取得されたページである場合:
_<!DOCTYPE html>
<html>
<head>
<title>Foo</title>
</head>
<body>
<div id="wrap">
<div id="header">
<h1>Foo</h1>
</div>
<div id="body"> content </div>
</div>
<div id="tooltip"> tooltip </div>
</body>
</html>
_
トップレベルの要素= _<body>
_の直接の子である要素を選択する場合-この例では_#wrap
_または_#tooltip
_-次にfilter()
を使用する必要があります。
他の要素を選択したい場合-この例では_#header
_、_<h1>
_、_#body
_、...-そしてfind()
を使用する必要があります。
あなたの要素が_<body>
_の子かどうかわからないので、次の「ハック」を使用できます。
$("<div>").html(data).find( selector );
この回避策を使用すると、常にfind()
を介して要素を取得できます。
_jQuery.load
_メソッドは次のコードを使用します。
_// If successful, inject the HTML into all the matched elements
if ( status === "success" || status === "notmodified" ) {
// See if a selector was specified
self.html( selector ?
// Create a dummy div to hold the results
jQuery("<div />")
// inject the contents of the document in, removing the scripts
// to avoid any 'Permission Denied' errors in IE
.append(res.responseText.replace(rscript, ""))
// Locate the specified elements
.find(selector) :
// If not, just inject the full result
res.responseText );
}
_
つまり、作成したDIVに完全な応答を追加し、その上でfind(selector)
を使用します。
だからあなたは次のようなものを見ているはずです:
_var foo = $('<div />').html(data).find('#foo'); // This looks like it'll work!
_
JQueryの観点からのちょっとしたハック!
これは、@ Mattのおかげで機能させることができた方法です
$.ajax({
type: "GET",
url: url,
dataType: 'html',
success: function(data) {
$('#foo').html(
$('<div />').html(data).find('#foo').html()
);
}
});
完全な_$.ajax
_メソッドで提供される特別な機能が必要ない場合は、$.load()
を試してみてください。
$ .get()とは異なり、.load()メソッドを使用すると、挿入するリモートドキュメントの一部を指定できます。これは、urlパラメータの特別な構文で実現されます。文字列に1つ以上のスペース文字が含まれている場合、最初のスペースに続く文字列の部分は、ロードされるコンテンツを決定するjQueryセレクターであると想定されます。
_$('#result').load('ajax/test.html #container');
_
使用する
$(data).filter("#foo").text();
これを使用して、HTMLコンセントを返すajax呼び出しの結果をフィルタリングしています