如何从ajax过滤返回数据的body html?

我的目的是,我想从数据中取出特定的html并仅更新该区域。

如何从jQuery.ajax过滤返回的数据?

这个链接是一个老post,但我确实有完全相同的问题。

从链接给出的解决方案是$("[ref=B]").html(data).find( '[ref=A]' );

但是,如果我这样做,整个页面将首先在上写,然后找到它内部的选择器…..

只找到'[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

 ` abc ` 

JS

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

返回的数据

   abc   

我的问题是,有没有一个解决方案来从$ .ajax返回的数据中过滤body的html? 喜欢

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

然后我可以做任何我想做的事,比如

 body_html.find('xxxx'); 

非常感谢你的建议。

您可以使用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')进行过滤,但正如你在本次测试中看到的那样,你的表现会下降很多。

 $("[ref=B]").append($(data).find("[ref=A]")); 

你在问题中的方式,最后一部分find( '[ref=A]' )是没用的。

[编辑]另外,另一个问题是2岁以上。 对于最新版本的jQuery,您可能需要其他引号:

 $("[ref='B']").append($(data).find("[ref='A']"));