Как извлечь фрагмент между тегами body (<body> ... </body>) из ответа AJAX в JavaScript - PullRequest
4 голосов
/ 27 сентября 2010

Ответ AJAX возвращает полную HTML-страницу.Мне нужно извлечь фрагмент между тегами тела (<body> и </body>).Это необходимо сделать на стороне клиента с помощью JavaScript.Любая помощь будет оценена.

Ответы [ 3 ]

4 голосов
/ 27 сентября 2010

Самым простым, но довольно худшим способом было бы простое взлом строки в тексте ответа.

var bodyhtml= html.split('<body>').pop().split('</body>')[0];

В общем случае это неудовлетворительно, но может быть выполнимо, если вы знаете точный форматВозвращаемый HTML-код (например, что атрибуты <body> отсутствуют, последовательности <body> и </body> не используются в комментарии в середине страницы и т. Д.).

Другойвсе еще довольно плохой способ - записать весь документ в innerHTML недавно созданного <div> и найти нужные элементы, не заботясь о том, что запись <html> или <body> внутри <div>сломана.Таким образом, вы не сможете надежно отделить дочерние элементы <head> от элементов в <body>, но именно это делает, например, jQuery.

Более надежный, но более болезненный способ - использоватьотдельный HTML-документ:

var iframe= document.createElement('iframe');
iframe.style.display= 'none';
document.body.insertBefore(iframe, document.body.firstChild);
var idoc= 'contentDocument' in iframe? iframe.contentDocument : iframe.contentWindow.document;
idoc.write(htmlpage);
idoc.close();
alert(idoc.body.innerHTML);
document.body.removeChild(iframe);

, хотя при этом также будут выполняться все скрипты внутри документа, что может его изменить, что также может быть неудовлетворительным.

0 голосов
/ 26 декабря 2010
// Get the XML object for the "body" tag from the XMLHttpRequest/ActiveXObject
// object (requestObj).

// NOTE: This assumes there is only one "body" tag in your HTML document.
var body = requestObj.responseXML.getElementsByTagName("body")[0];

// Get the "body" tag as an XML string.
var bodyXML;

// for Internet Explorer            
if (body.xml) {
    bodyXML = body.xml;
}

// for every other browser
if (typeof (XMLSerializer) != "undefined") {
    var serializer = new XMLSerializer();
    bodyXML = serializer.serializeToString(body);
}

Это возвращает вам XML для тега "body" в виде строки. К сожалению, он по-прежнему включает в себя «» и «», поэтому, если вам нужно только содержимое тега, вам придется их удалить.

Возможно, вы захотите взглянуть на второй пример («Пример HTML-кода 2») на этой странице .

0 голосов
/ 27 сентября 2010

Если ваша HTML-страница находится в сети, вы можете использовать YQL.

например, если URL вашей страницы http://xyz.com/page.html и вы хотите все в элементе тела делай так

select * from html where url="http://xyz.com/page.html" and xpath='//body'

Если вы новичок в YQL, прочтите это http://en.wikipedia.org/wiki/YQL_Page_Scraping

Существует также простой способ сделать это с помощью расширения Chromyqlip https://chrome.google.com/extensions/detail/bkmllkjbfbeephbldeflbnpclgfbjfmn

Надеюсь, это поможет Вам !!!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...