我想用JavaScript截断一个动态加载的字符串。这是一个url,所以没有空格,我显然不关心单词的边界,只关心字符。
以下是我得到的答案:
var pathname = document.referrer; //wont work if accessing file:// paths
document.getElementById("foo").innerHTML = "<a href='" + pathname +"'>" + pathname +"</a>"
我想用JavaScript截断一个动态加载的字符串。这是一个url,所以没有空格,我显然不关心单词的边界,只关心字符。
以下是我得到的答案:
var pathname = document.referrer; //wont work if accessing file:// paths
document.getElementById("foo").innerHTML = "<a href='" + pathname +"'>" + pathname +"</a>"
当前回答
是的,子字符串。你不需要做Math.min;索引比字符串长度长的子字符串以原始长度结束。
But!
document.getElementById("foo").innerHTML = "<a href='" + pathname +"'>" + pathname +"</a>"
这是一个错误。如果文件。推荐人有一个撇号?或者在HTML中具有特殊意义的各种其他字符。在最坏的情况下,引用器中的攻击者代码可能会将JavaScript注入您的页面,这是一个XSS安全漏洞。
虽然可以手动转义路径名中的字符来阻止这种情况发生,但这有点麻烦。你最好使用DOM方法,而不是摆弄innerHTML字符串。
if (document.referrer) {
var trimmed= document.referrer.substring(0, 64);
var link= document.createElement('a');
link.href= document.referrer;
link.appendChild(document.createTextNode(trimmed));
document.getElementById('foo').appendChild(link);
}
其他回答
逻辑如下
得到字符串的长度 如果大于阈值,则获取 子字符串并以省略号或其他符号结束 否则,返回输入字符串 函数truncateString(str: string, num: number, end: string = '…'){ 返回str.length > num ?str.slice(0, num) + end: str; }
这里有一个你可以使用的方法。这是FreeCodeCamp挑战之一的答案:
function truncateString(str, num) {
if (str.length > num) {
return str.slice(0, num) + "...";
} else {
return str;
}
}
下面的代码截断字符串,不拆分单词,而是丢弃发生截断的单词。完全基于Sugar.js源代码。
function truncateOnWord(str, limit) {
var trimmable = '\u0009\u000A\u000B\u000C\u000D\u0020\u00A0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u2028\u2029\u3000\uFEFF';
var reg = new RegExp('(?=[' + trimmable + '])');
var words = str.split(reg);
var count = 0;
return words.filter(function(word) {
count += word.length;
return count <= limit;
}).join('');
}
可以在内部JavaScript方法的帮助下修复此方法
Const truncate = (text, len) => { 如果(文本。长度> len && text。长度> 0){ 返回“${文本。(" ")。片(0,len)。Join(" ")}…'; }其他{ 返回文本; } };
我觉得应该提一下Sugar.js。它有一个截断方法,非常聪明。
从文档中可以看到:
截断字符串。除非split为true, truncate不会将单词拆分,而是 丢弃发生截断的单词。
例子:
'just sittin on the dock of the bay'.truncate(20)
输出:
just sitting on...