Как мне отфильтровать тело html возвращаемых данных из ajax?
Моя цель - я хочу извлечь из данных определенный 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>
У меня вопрос, есть ли решение для фильтрации тела HTML от данных, которые вернулись из $.ajax?? лайк
body_html = $(data).???????
тогда я могу делать все, что захочу, например
body_html.find('xxxx');
Большое спасибо за ваш совет.
2 ответа
Вы можете использовать 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']"));