我想用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);
}
其他回答
这里有一个你可以使用的方法。这是FreeCodeCamp挑战之一的答案:
function truncateString(str, num) {
if (str.length > num) {
return str.slice(0, num) + "...";
} else {
return str;
}
}
是的,substring工作得很好:
stringTruncate('Hello world', 5); //output "Hello..."
stringTruncate('Hello world', 20);//output "Hello world"
var stringTruncate = function(str, length){
var dots = str.length > length ? '...' : '';
return str.substring(0, length)+dots;
};
ES6更新版本
const truncateString = (string = ", maxLength = 50) => 字符串。length > maxLength ? “${字符串。substring(0,最大长度)}……” :字符串 //演示上述函数 alert(truncateString('Hello World', 4));
使用substring方法:
var length = 3;
var myString = "ABCDEFG";
var myTruncatedString = myString.substring(0,length);
// The value of myTruncatedString is "ABC"
在你的例子中:
var length = 3; // set to the number of characters you want to keep
var pathname = document.referrer;
var trimmedPathname = pathname.substring(0, Math.min(length,pathname.length));
document.getElementById("foo").innerHTML =
"<a href='" + pathname +"'>" + trimmedPathname + "</a>"
如果您想通过Limit(符号)截断, 但对于不长的文本(例如标题),你不想删减单词(保留最后一个单词完整):
trancWord(str, limit) {
str = str.split(' ');
let summ = 0
for (let [index, value] of str.entries()) {
summ += value.length
if (summ > limit) {
let cutTolimit = str.slice(0, index);
return str.slice(0, index).join(' ') + ' ' + '...';
}
}
return str.join(' ');
}
对于长字符串(一些长文本后Vue-3使用过滤器):
trancWord (str, max){
if (str.length <= max) { return str; }
let subString = str.substr(0, max);
return (str ? subString.substr(0, subString.lastIndexOf(' ')) : subString) + '...';
}