2010-09-27 52 views
4

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

+2

你使用任何JavaScript库,或香草JavaScript? – dekomote 2010-09-27 11:31:43

+3

'xmlhttp.responseXML.body'? – galambalazs 2010-09-27 11:45:50

+0

感谢所有回答。现在,我们采取了串的方法,因为我们知道正在返回的HTML的确切格式(我们正在创造它自己)。我查找YQL作为这种需求的通用技术。 – 2011-02-17 22:03:17

回答

0

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

例如,如果你的网页的网址为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

希望这会帮助你!

4

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

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

这是在一般情况下不尽人意,但可能是可行的,如果你知道正在返回的HTML的精确格式(例如,有是在<body>没有属性,该序列<body></body>不用在页面中间的评论中,等等)。

另一个仍然相当坏的方法是编写整个文档到新创建的<div>捞出你想要的,不关心,写<html><body>一个<div>内被打破元素的innerHTML。您将无法通过这种方式可靠地将<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
// 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的“身体”的标签,作为一个字符串。不幸的是,它仍然包含了“<体>”和“< /身体>”,所以如果你只想要标记的内容,你将不得不剥离这些了。

你可能想看看在this page第二个示例(“示例HTML代码2”)。

相关问题