如何从JavaScript中的AJAX响应中提取body(...)标记之间的片段

时间:2010-09-27 11:29:24

标签: javascript html ajax

AJAX响应正在返回完整的HTML页面。我需要在正文(<body></body>)标记之间提取片段。这需要使用JavaScript在客户端完成。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:4)

最简单但最糟糕的方式是对响应文本进行简单的字符串黑客攻击。

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

这在一般情况下是不能令人满意的,但如果您知道返回的HTML的确切格式(例如,<body>上没有属性,那么序列<body></body>未在页面中间的评论中使用,等等。)

另一个仍然非常糟糕的方法是将整个文档写入新创建的innerHTML的{​​{1}}并删除所需的元素,而不是关心写作<div><html>内的<body>被破坏。你将无法通过这种方式可靠地将<div>的子元素与<head>中的子元素分开,但这就是jQuery所做的。

更强大但更痛苦的方法是使用单独的HTML文档:

<body>

虽然这也会执行文档中的所有脚本,但可能会更改它,因此可能也不会令人满意。

答案 1 :(得分:0)

如果您的HTML页面在Web上,那么您可以使用YQL。

例如,如果您的网页网址为http://xyz.com/page.html,并且您希望body元素中包含所有内容 喜欢这个

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

如果您是YQL的新手,请阅读此http://en.wikipedia.org/wiki/YQL_Page_Scraping

使用Chromyqlip Extension https://chrome.google.com/extensions/detail/bkmllkjbfbeephbldeflbnpclgfbjfmn

也可以使用简单的方法

希望这会对你有所帮助!

答案 2 :(得分:0)

// 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);
}

这将为您提供“body”标记的XML,作为字符串。不幸的是,它仍然包含“&lt; body&gt;”和“&lt; / body&gt;”,所以如果你只想要标签的内容,你将不得不将它们剥离。

您可能需要查看this page上的第二个示例(“示例HTML代码2”)。