4

私の目的は、データから特定の html を取り出し、その領域のみを更新することです。

jQuery.ajax から返されたデータをフィルタリングするにはどうすればよいですか?

このリンクは古い投稿ですが、まったく同じ問題があります。

リンクからの解決策は$("[ref=B]").html(data).find( '[ref=A]' );

ただし、そうすると、最初にページ全体が書き込まれ<span ref='B'>、その中にセレクターが見つかります.....

'[ref=A]' のみを検索する別の方法は次のとおりです。

html = $(data).filter('[ref=B]').find('[ref=A]').html() // this way will work

これらのどれも機能しません

$(data).find('[ref=A]').html();
$(data).filter('[ref=A]').html();
$(data).filter('body').html();
$(data).find('body').html();

HTML

`<body>

<span ref='B'><span ref='A'>abc</span></span>

</body>`

JS

 $(function() {
$.get(window.location.pathname + window.location.search, function(data){ alert(data);});
 });

返されたデータ

<html>
<body>
    <span ref='B'><span ref='A'>abc</span></span>
</body>
</html>

私の質問は、$.ajax から返されたデータから body の html をフィルタリングするソリューションはありますか?? お気に入り

body_html = $(data).??????? 

それから私は好きなことをすることができます

body_html.find('xxxx');

アドバイスありがとうございます。

4

2 に答える 2

3

DocumentFragmentを使用して html をシミュレートし、 DOMに追加せずに検索を実行できます。

// Create your DocumentFragment to be able to work without DOM
var body_html = document.createDocumentFragment();

// Convert and append data from your jQuery to work with fragment
body_html.appendChild($(data)[0]);

// Now you can select using your jQuery
var $body_html = $(body_html);

// Now you can use the find or whatever you want, like if it was in the DOM
$body_html.find('.foo');

// Or you can append in your current document, 
// but attention, after it the fragment reference is erased
$body_html.appendTo(document.body); 
// now you need to get reference again from body, 
// because your fragment doesn't exists anymore.

// So... if you try:
console.log(body_html); // undefined
console.log($body_html); // jquery over undefined, probably just a jquery useless

// At this point you will need to reference from DOM to continue manipulation
$body_html = $(document.body);
// Now I'm ready to continue the work
// This var is like your DocumentFragment, but already on DOM.

jQuery テンプレートでフィルターを実行することもできます$(data).filter('.foo')が、このテストでわかるように、パフォーマンスが大幅に低下します。

于 2013-01-08T00:38:41.017 に答える
2
$("[ref=B]").append($(data).find("[ref=A]"));

あなたの質問のやり方では、最後の部分find( '[ref=A]' )は役に立ちません。

[編集] また、もう 1 つの質問は 2 年以上前のものです。jQuery の最近のバージョンでは、追加の引用符が必要になる場合があります。

$("[ref='B']").append($(data).find("[ref='A']"));
于 2013-01-08T01:01:07.477 に答える