有没有人有比明显的解决方案/库更复杂的解决方案/库来使用 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': ' '});