在Firefox中通过PHP或CSS截断带有省略号的长字符串

时间:2011-03-18 22:35:46

标签: php html css firefox

  

可能重复:
  text-overflow:ellipsis in Firefox 4?

我遇到Truncating long strings with CSS: feasible yet?中提到的同一问题。该帖子已经差不多两年了,Firefox仍然忽略了text-overflow: ellipsis;属性。

我目前的解决方案是在PHP中截断长字符串,如下所示:

if(strlen($some_string) > 30)
    $some_string = substr($some_string,0,30)."...";

或多或少有效,但它在支持它的浏览器中看起来不如text-overflow: ellipsis;那么好或准确。由于我没有使用等宽字体,因此实际宽度为30个字符。另一个帖子中发布的XML修补程序和jQuery插件似乎也不再适用于Firefox。

目前有哪种方法可以在独立于浏览器的CSS中执行此操作?如果没有,有没有办法在PHP中给出字体和字体大小来测量字符串的宽度,以便我可以更准确地放置省略号?

2 个答案:

答案 0 :(得分:1)

This answer可能有助于将输出截断为最接近的单词,然后只需将…(...)HTML实体附加到输出的末尾即可获得最终输出。

正如您已经注意到,目前还没有足够广泛的浏览器支持CSS解决方案,您仍然需要担心旧的浏览器。

答案 1 :(得分:1)

令人遗憾的是,所有浏览器都无法处理相同的CSS功能。但是,您总是可以使用JavaScript(在jQuery的帮助下)执行此类操作。

以下是这样的事情的示例:http://jsfiddle.net/VFucm/

基本思想是将你的字符串变成一个单词数组,如下所示:

var words = full.split(/\s+/g);

循环遍历它们并取第一个N(在本例中我选择了24个)并将它们推入另一个数组:

for (var i = 0; i < 24; i++) {
    short.push(words[i]);
}

将它们放回到它们来自的HTML元素中:

$('.snip').html(short.join(" ") + ' <span class="expand">...</span>');

...这里我添加了一个“链接”来扩展短文本。它的外观和行为类似于使用CSS的链接。我还提供了一个函数来再次用foll文本替换缩短的文本:

$('.expand').click(function() {
    $('.snip').html(full);
});