如何在文本的每 5,000 个字符之后的第一个 <p> 或 <br> 之后插入一个 <hr>

How can I insert a <hr> after the first <p> or <br> following every 5,000 characters of some text?

本文关键字:之后 插入 一个 hr br 第一个 文本 字符      更新时间:2023-09-26

我有一些很长的段落。我想将它们分解以便于阅读。我想通过为每 5,000 个字符添加一个 <hr> 标签来划分它们。但我也不想在段落中间划分文本。因此,我想在每 5,000 个字符的第一个<p> or <br>之后添加 <hr> 标签。"文本"已经具有HTML格式,因此我们可以直接在文本中找到<p> or <br>

我可以在后端使用 PHP 或在前端使用 JS/jQuery,以更好的方法为准。

是一个新手,我完全被困住了。我不知道如何实现这一目标。希望你能帮到忙。谢谢!

这是jQuery中的一个解决方案。 可以使用 jsFiddle。

在示例中,我拆分了 100 个字符,以便我们可以看到效果。 代码如下:

$(function () {
    var counter = 0;
    $("p").each(function (i, element) {
        counter += $(element).text().length;
        if (counter > 100) {
            counter = 0;
            $(element).append("<hr/>");
        }
    });
});

该算法的高级是为每个段落保留文本大小计数器,当它超过阈值时,添加一条水平线并重置计数器。

这是 PHP 中的一个解决方案

$text = "<p>bla...bla</p><p>bla...bla</p><p>bla...bla</p><p>bla...bla</p>"; 
$textArray = explode("</p>",$text);
foreach ($textArray as &$value) {
 echo $value."</p>";
 $countText = strlen(strip_tags($value))+$countText;
  if ($countText > 4999 )
   { echo "<hr/>"; $countText = ""; }
}
您可能

想将其分解成句子,然后可能在每个段落中选择一个数字,也许是5个句子,然后在每5个句子之后插入一个<hr>

要将文本分解成句子,您可以查看 php 句子边界检测

  $(function () {
   var total_length = 0;
   $("p").each(function (i, element) 
   {
       total_length += $(element).text().length;
       if (total_length >= 5000) {
           total_length = 0;
           $(element).append("<hr/>");
        }
   });
 });

希望它对你有用