0

私は何時間もグーグでしたが、答えが見つかりません。提案してください:

次のような段落のユーザーコメントのみを含む.htmlファイルがある。

<p>12/02/2012 4:32pm Mark</p>
<p>Hi! it's a nice demo! Really thankful</p>

<hr>

<p>11/02/2012 11:03am Miron</p>
<p>How to change the font size from CFD again?</p>

<hr>

<!-- AND LOADS OF OTHER <P><P> COMMENTS DELIMITED BY <HR> ... -->

このように構成された1000のコメントがあります、
私はどういうわけか最新の10を取得したいと思います(日付ではなく、最初の「10」のコメントだけです)。そして、私は方法がわかりません。

私はjQueryを使用.load('comments.html')して、最初の10個のコメント以外のすべての要素を削除できることを知っています。あるいは、ファイル全体をPHPで含めて、.hide()jQuery行うよりも...しかし、ファイル全体を10個のコメントだけでロードすることをお勧めします。

そのファイルを分割して、ファイル<div id="latest_10_comments"></div>の最初の10個のコメントに入れるにはどうすればよいcomments.htmlですか?

4

4 に答える 4

2

JavaScriptソリューションが必要なことは知っていますが、これはPHPでexplode関数を使用して行うことができます。

このようなもの:

$comments = explode("<hr>", file_get_contents("/comments.html"));
for($i = 0; $i < 10; $i++) {
   print($comments[$i]);
}

これにより、$commentsという配列が作成されます。この配列はcomments.htmlの各コメントを

<hr>

鬼ごっこ。

于 2012-12-10T22:00:13.357 に答える
1

まず、この問題へのアプローチを完全に再考することをお勧めします。なぜこのようにすべてをHTMLファイルに保存するのですか?特定のコメントをオンデマンドで動的にロードする場合は、XMLファイルとして保存するか、データベースに保存する必要があります。

ただし、質問に答えるには、PHPでこれを行う場合は、 PHPのDomDocumentのようなX/HTMLパーサーを使用する必要があります。これが実際の例です...

編集OPの望ましい動作を反映するように変更されました):

$dom = new DomDocument;
$dom->loadHTMLFile("comments.html");

// Get all the P tag elements in the DOM
$comments = $dom->getElementsByTagName('p');

// Get only the first 10
$amount = 10; // number of comments you want
foreach ($comments as $num => $comment_nodes) {
    if ($num + 1 > $amount)
        break;
    echo $comment_nodes->nodeValue, PHP_EOL;
}
于 2012-12-10T22:12:44.983 に答える
0

解決策1.RegExパターンを使用して2つのpタグに一致し、その後にhrを続けて、パターンを10回繰り返すことができます。

解決策2.他の回答(CHRIS)からのアイデアですが、PHPでエラーが発生するため、これを提案します。

    $comments = explode("<hr>", file_get_contents("/comments.html"));
    for($i = 0; $i < 10; $i++) {
       print($comments[$i]);
    }
于 2012-12-10T22:00:34.650 に答える
0
$("<p>").each(function(index, value)
{
    //Do what you want here
}

これにより、すべてが循環します<p>。要素の順序がわかっている場合は、に基づいて要素を使ってやりたいことができますindex

于 2012-12-10T22:00:04.137 に答える