【问题标题】:Keep two first text lines, remove everything else保留前两个文本行,删除其他所有内容
【发布时间】:2012-12-20 13:57:03
【问题描述】:

<div> 我有一些文字。由于div-width,文本显示为多行。例如。以下代码:

<div>text01 text02 text03 text04 text05 text06 text07 text08 text09 text10 text11 text12</div>

可能会显示在例如四行:

text01 text02 text03
text04 text05 text06
text07 text08 text09
text10 text11 text12

我希望只保留前两行,如果还有其他行,则必须将它们删除并替换为文本行 ... 作为新的(因此是第三个)文本行。
换句话说:我希望找到第二个换行符(如果存在),并将此点之后的所有文本替换为 ... 的文本行。

所以,如果我有两行文字,什么都不会改变:

text text text
text text text

但是如果我有两个以上的行,我会得到这个:

text01 text02 text03
text04 text05 text06
...

有什么好的建议吗?

【问题讨论】:

  • 在 PHP 端(即服务器端)做这件事并不容易,因为行的大小会因客户端分辨率而异。
  • 所以需要一些javascript?
  • 我已经编辑并添加了 jquery 标签。谢谢。
  • 即使使用 JavaScript 也很难正确实现。您基本上必须在一行中计算文本宽度,然后您需要获得与所需div宽度的差异,然后将字符数近似为sub off。

标签: php jquery html line-breaks


【解决方案1】:

您应该在 css 中执行此操作,并在必要时添加 javascript。

在css中可以设置:

.two-line-div {
  max-height: 3em;    /* or whatever adds up to 2 times your line-height */
  overflow: hidden;
}

这会将盒子减小到所需的高度。

如果你总是想显示...(如果内容总是超过2行),只需在div后面添加一个带有三个点的元素。

如果您想添加另一行 ... 如果内容大于您显示的内容,则需要 javascript 计算原始高度,查看是否超过 2 行并动态添加/显示元素如果是的话。

请注意,css 解决方案不会删除任何内容,所有行都在那里,只是不可见。

【讨论】:

  • 谢谢。我实际上需要它比这更有活力;如果只有一行,那么周围的 div 框也应该只有一行高,而不是永久说 3em 高。
  • @Steeven 这是自动的,我使用的是max-height 而不是height,所以只有一行,但框只有一行。 max-height 告诉盒子增长到某个最大值。
【解决方案2】:

在大多数现代浏览器中都有一个纯 CSS 解决方案(一些较旧的 firefox 版本不支持它):

div {
    overflow: hidden; /* "overflow" value must be different from "visible" */
    text-overflow: ellipsis; /* the magic dots...*/
    height: <yourHeightValue>
    width: <yourWidthValue>
}

在 PHP 中做这样的事情可能有点复杂,这取决于 DIV 包含的内容(嵌套的 HTML?,对你来说究竟什么是“行”-> HTML 中断
,换行符 \ n)?在大多数情况下,PHP 解决方案在定义的字符串或单词长度后拆分。你可以找到很多这种文本限制的例子,this one 是一个复杂的解决方案,它也可以处理 html 标签。

【讨论】:

  • ellipsis 听起来比实际上更好;它只适用于一行,而不适用于多行。
  • 是纯文本的文本行,没有html。如果ellipsis 垂直工作而不仅仅是水平工作,那就完美了。不过我做不到……
  • 是的,你是对的,忘记了。省略号在多行上下文中仍然不可用。
  • 有一个多行省略号的jQuery插件dotdotdot.frebsite.nl,只要CSS不给你机会。
【解决方案3】:

您可以使用explode() 将您的字符串(div 的内容)拆分为一个数组。使用&lt;br&gt;/n 作为拆分令牌。然后可以将div的内容替换为数组的前两个元素。

$content = 'Hello<br>World<br>Other<br>Stuff';
$lines = explode('<br>',$content,2);

echo '<div>'$lines[0].'<br>'.$lines[1].'<br>...</div>'

【讨论】:

  • 但是如果我的文本行只是:$content = 'Hello World Other Stuff'; 没有任何&lt;br&gt;,那么脚本是否能够挑选出自动添加的\n
  • 你可以使用 nl2br($content);
  • 我无法完成这项工作。 $a=explode('&lt;br&gt;',nl2br($content)); echo count($a) 的计数仅计算文本中已经存在的换行符。它看不到由在div 内换行引起的换行符。
猜你喜欢
  • 2022-07-21
  • 2023-01-16
  • 2014-03-11
  • 1970-01-01
  • 1970-01-01
  • 2022-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多