在过去的2个小时里试图解决这个问题。我把这个html作为一个来自AJAX请求的字符串返回:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Preview</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="author" content="Connected Ventures LLC. Copyright 1999-2010." />
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="js/jquery.ui.js"></script>
<script type="text/javascript" src="js/article.js"></script>
<link href="/css/global.css" rel="stylesheet" type="text/css" />
<link href="/css/article.css" rel="stylesheet" type="text/css" />
<style type="text/css">
html, body { background: #fff; color: #000; }
</style>
</head>
<body class="the_article">
<p>s</p></body>
</html>
我需要在body标签之间获取内容。我已经尝试过这个在另一个关于通过jQuery解析html的SO问题中提出的建议:
$(ajax_response).find('body.the_article').html();
没用。即使添加了以下内容:
dataType: 'html'
作为ajax请求参数。然后我尝试使用正则表达式解析它:
ajax_response.match(/<body class="the_article">.*?<\/body>/);
它只是警告null。知道如何获得身体内容吗?
答案 0 :(得分:0)
您的REGEX失败,因为字符串是多行的,.
通配符匹配除空格字符以外的所有字符,因此换行符后面的开头body
标记和正文内容,打破了模式。
使用[\s\S]
代替.
(字面意思是允许使用非空格和空格字符)
/<body class="the_article">[\s\S]*?<\/body>/
[编辑] - 在回复评论时,要捕获不包含其标签的正文内容,请将内容捕获为子组:
var body = response.match(/<body class="the_article">([\s\S]*?)(?=<\/body>)/);
console.log(body[1]); //body content, not including tag
另请注意,我们将结束体标记指定为预测,因为我们根本不需要匹配它,只是锚定它。 (JS不支持后视,缺少模拟like the one I wrote,因此我们别无选择,只能捕获开放正文标记。)
答案 1 :(得分:0)
你可以让dom为你工作。 使用document.write在iframe中注入代码,然后访问frame.document.body.innerHTML属性。