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 条(不是按日期,只是前“十”条评论)。而且我不知道怎么做。

我知道我可以使用 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
$("<p>").each(function(index, value)
{
    //Do what you want here
}

这将循环遍历您的所有<p>. 如果您知道元素的顺序,那么您可以根据index.

于 2012-12-10T22:00:04.137 回答
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 回答