Попытка выбрать тег 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");