如何从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']"));