0

在过去的 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>

我需要在正文标签之间获取内容。我已经尝试过这个,这是在另一个关于通过 jQuery 解析 html 的 SO 问题中提出的:

$(ajax_response).find('body.the_article').html();

没用。即使在添加后:

dataType: 'html'

作为ajax请求参数。然后我尝试使用正则表达式解析它:

ajax_response.match(/<body class="the_article">.*?<\/body>/); 

它只是提醒null。知道如何获取正文内容吗?

4

2 回答 2

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不支持look-behinds,缺少像我写的那样的模拟,所以我们别无选择,只能捕获开始的body标签)。

于 2012-07-05T22:03:07.470 回答
0

您可以让 dom 为您完成工作。使用 document.write 在 iframe 中注入代码,然后访问 frame.document.body.innerHTML 属性。

于 2012-07-05T22:10:16.080 回答