AJAX响应返回完整的HTML页面。我需要提取正文(<body>
和</body>
)标签之间的片段。这需要使用JavaScript在客户端完成。任何帮助将不胜感激。如何从JavaScript中的AJAX响应中提取正文(<body> ...</body>)标记之间的片段
4
A
回答
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”)。
相关问题
- 1. 如何从<script>标记中的AJAX响应字符串读取变量?
- 2. 意外的<head/> AJAX响应中的标记
- 3. 如何从响应中删除“<?xml ...>”标记?
- 4. 如何在Python中提取<h1></h1>之间的href链接?
- 5. 从javascript中提取<a>
- 6. 如何从JavaScript文件中提取一个XML片段?
- 7. jsp表达式标记之间的区别<%和<%=
- 8. 如何提取硒中的标记之间的数据
- 9. <script> javascript中的标记
- 10. 如何从ajax响应中找到$(xml)标记的长度
- 11. <plugins>与Maven`pom.xml`中的<pluginManagement>标记之间的区别
- 12. 好的,添加<script>标记*之前* <head>标记?
- 13. Ruby中+和<<之间的区别
- 14. <script><asp:repeater>中的标记
- 15. 如何提取unix中两个标记之间的值
- 16. 如何从提取中获取响应的标题
- 17. 如何从成功回调中提取Ajax响应数据
- 18. 如何检索两个之间的数据<br/>标记
- 19. 如何在Servlet中获取<li></li>标记中的值?
- 20. 意外标记<AJAX jquery
- 21. NodeJs:从响应主体中提取特定标记的数据
- 22. 如何从Python请求调用中提取HTTP响应正文?
- 23. 如何使用route-translator gem在html中使用链接标记(在<a></a>标记之间)?
- 24. 在Ajax响应检索从<head>的<title>元素文本
- 25. 在XML中的<>标记之间计数字符
- 26. 使用beautifulsoup</br>标签之间的数据提取
- 27. 如何在VB.NET中提取邮件正文中的img标记
- 28. 正则表达式中的BBCode风格的标记之间,以提取文本
- 29. 使用beautifulsoup提取(如<br />标签)换行之间的文本
- 30. 如何用Java SOAP响应中的(<)替换(<)SAAJ
你使用任何JavaScript库,或香草JavaScript? – dekomote 2010-09-27 11:31:43
'xmlhttp.responseXML.body'? – galambalazs 2010-09-27 11:45:50
感谢所有回答。现在,我们采取了串的方法,因为我们知道正在返回的HTML的确切格式(我们正在创造它自己)。我查找YQL作为这种需求的通用技术。 – 2011-02-17 22:03:17