Попытка выбрать тег body из html, который возвращается с помощью запроса get()
Я создаю ajax get call, который возвращает мне содержимое html-страницы. Я пытаюсь выбрать содержимое тега body
, но мой селектор возвращает пустой объект jquery.
$.get(filename, function(data) {
console.log($("body", data));
})
где data
- содержимое html файла.
Ответы
Ответ 1
jQuery не может выбрать body
строки ответа, потому что тег <body>
исчезает, когда строка преобразуется с помощью $()
.
Следовательно, вам нужно выбрать тело из строки data
по-другому, например, регулярные выражения. Пример:
$.get(filename, function(data) {
var body = data.replace(/^[\S\s]*<body[^>]*?>/i, "")
.replace(/<\/body[\S\s]*$/i, "");
//Optionally, convert the string to a jQuery object:
body = $(body);
console.log(body);
}))
Примечание. Мое регулярное выражение приняло продуманный HTML-документ, где >
корректно отображаются с использованием объектов HTML. Если это не так, необходимо использовать более сложные RegExps, например те, которые показаны на этом вопросе.
Ответ 2
jQuery использует объектную модель документа, а не "текст", составляющий эту модель. У вас есть только большой фрагмент текста в элементе данных, который еще не был добавлен в документ.
$(body).html(data);
... при условии, что данные содержат действительный код тела. Это полная HTML-страница, тогда вам нужно будет разобрать ее только для содержимого тела, например. используя indexOf или somesuch.
Ответ 3
Я думал, что решение регулярного выражения выглядит трудно читаемым, поэтому я подумал, что дам еще один вариант. С помощью селекторов jQuery вы можете выбрать тег заголовка, используя следующий код и ссылка JSFiddle
$('header');
Предполагая, что вы разместили header
сразу после своего body
, вы можете продолжить это.
$('header').parent();
Я использовал это, чтобы добавить/удалить поле в тело, если у меня есть вкладка вылета слева, используя следующий код.
$('header').parent().css("margin-left", "250px");