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>

body タグの間にコンテンツを取得する必要があります。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 は、私が書いたようなシミュレーションを除き、後読みをサポートしていないため、開始のbody タグをキャプチャするしかありません)。

于 2012-07-05T22:03:07.470 に答える
0

あなたはdomにあなたのために仕事をさせることができます. document.write を使用して iframe にコードを挿入し、frame.document.body.innerHTML プロパティにアクセスします。

于 2012-07-05T22:10:16.080 に答える