代码之家  ›  专栏  ›  技术社区  ›  mati

当文字长度超过所需长度时,如何剪裁文字并附加省略号?

  •  3
  • mati  · 技术社区  · 15 年前

    我正在寻找一个好的方法来附加省略号“…”,当我需要优雅地显示一个字符串,它太大,不适合我想要的空间。

    我目前正在做的是寻找一个最大长度的字符,将适合的空间,然后削减字符串的长度和附加“…”。所有这些都在服务器端。

    在伪代码中应该如下所示:

    // I define this MAXCHARS var value by hunch
    String outputString = MyLengthyString.SubString(0, MAXCHARS)
    outputString.concatenate("...")
    view.aLabelInThePage = outputString
    

    问题是当我不使用固定长度字体时,它可能会以我想要的方式显示(占用所有空间)。

    有没有办法只使用JavaScript和CSS就可以得到想要的结果?如果没有,还有比我更好的方法吗?

    3 回复  |  直到 14 年前
        1
  •  6
  •   Andy E    14 年前

    你可以用 CSS3 text-overflow property 值为 ellipsis . 此属性是 introduced in IE6 后来被其他主流浏览器采用,Firefox 7是最新增加支持的浏览器:

    #mySpan {
      /* IE 6+, Opera 11+, Chrome 1+, Safari 1.3+, Firefox 7+ */
      text-overflow: ellipsis;
    
      /* IE 8    */ -ms-text-overflow: ellipsis;
      /* Opera 9 */ -o-text-overflow: ellipsis;
    }
    

    firefox9将是第一个为这个属性实现双值语法的浏览器,它允许文本的左右两边都有一个值,尽管这个语法目前被认为是有风险的 working draft specification .


    This page 有一个非JS的解决方案用于旧版本的Firefox,但它并不完美,并且有一些限制。

        2
  •  1
  •   SLaks    15 年前

    你可以用 text-overflow: ellipsis; ,但Firefox不支持它。

        3
  •  0
  •   bryanjonker    15 年前

    if ($("#mySpan").width() > 400) {
         $("mySpan").width(400);
         $("mySpanEllipsis").show();
    } 
    else {
         $("mySpanEllipsis").hide();
    }
    

    你的HTML看起来像

    <span id="mySpan"></span><span id="mySpanEllipsis">...</span>
    

    未经测试,因此使用风险自负:-)。