有没有人有比明显的解决方案/库更复杂的解决方案/库来使用 JavaScript 截断字符串并在末尾添加省略号:
if (string.length > 25) {
  string = string.substring(0, 24) + "...";
}
有没有人有比明显的解决方案/库更复杂的解决方案/库来使用 JavaScript 截断字符串并在末尾添加省略号:
if (string.length > 25) {
  string = string.substring(0, 24) + "...";
}
本质上,您检查给定字符串的长度。如果它比给定的 length 长n,则将其剪裁为 length n(substr或slice) 并将 html 实体…(...)添加到剪裁的字符串中。
这样的方法看起来像
function truncate(str, n){
  return (str.length > n) ? str.substr(0, n-1) + '…' : str;
};
如果“更复杂”是指在字符串的最后一个单词边界处截断,那么您需要进行额外检查。首先将字符串剪辑到所需的长度,然后将其结果剪辑到其最后一个单词边界
function truncate( str, n, useWordBoundary ){
  if (str.length <= n) { return str; }
  const subString = str.substr(0, n-1); // the original check
  return (useWordBoundary 
    ? subString.substr(0, subString.lastIndexOf(" ")) 
    : subString) + "…";
};
您可以String使用您的函数扩展本机原型。在这种情况下,str应该删除参数,并str在函数内替换为this:
String.prototype.truncate = String.prototype.truncate || 
function ( n, useWordBoundary ){
  if (this.length <= n) { return this; }
  const subString = this.substr(0, n-1); // the original check
  return (useWordBoundary 
    ? subString.substr(0, subString.lastIndexOf(" ")) 
    : subString) + "…";
};
更教条的开发人员可能会为此强烈谴责你(“不要修改你不拥有的对象”。不过我不介意)。
一种不扩展String原型的方法是创建您自己的辅助对象,其中包含您提供的(长)字符串和前面提到的截断它的方法。这就是下面的代码片段所做的。
最后,您只能使用 css 截断 HTML 节点中的长字符串。它给您的控制较少,但很可能是可行的解决方案。
请注意,这只需要为 Firefox 完成。
所有其他浏览器都支持 CSS 解决方案(请参阅支持表):
p {
    white-space: nowrap;
    width: 100%;                   /* IE6 needs any width */
    overflow: hidden;              /* "overflow" value must be different from  visible"*/ 
    -o-text-overflow: ellipsis;    /* Opera < 11*/
    text-overflow:    ellipsis;    /* IE, Safari (WebKit), Opera >= 11, FF > 6 */
}
具有讽刺意味的是,我从 Mozilla MDC 获得了该代码片段。
人们可能希望在 JavaScript 而不是 CSS 中执行此操作是有正当理由的。
在 JavaScript 中截断为 8 个字符(包括省略号):
short = long.replace(/(.{7})..+/, "$1…");
或者
short = long.replace(/(.{7})..+/, "$1…");
_.truncate('hi-diddly-ho there, neighborino');
// → 'hi-diddly-ho there, neighbo…'
或underscore.string 的 truncate。
_('Hello world').truncate(5); => 'Hello...'
('long text to be truncated').replace(/(.{250})..+/, "$1…");
不知何故,上面的代码不适用于 vuejs 应用程序中的某种复制粘贴或书面文本。所以我使用了lodash truncate,它现在工作正常。
_.truncate('long text to be truncated', { 'length': 250, 'separator': ' '});