我想用JavaScript截断一个动态加载的字符串。这是一个url,所以没有空格,我显然不关心单词的边界,只关心字符。

以下是我得到的答案:

var pathname = document.referrer; //wont work if accessing file:// paths
document.getElementById("foo").innerHTML = "<a href='" + pathname +"'>" + pathname +"</a>"

当前回答

这里有一个你可以使用的方法。这是FreeCodeCamp挑战之一的答案:

function truncateString(str, num) {
  if (str.length > num) {
    return str.slice(0, num) + "...";
  } else {
    return str;
  }
}

其他回答

是的,子字符串。你不需要做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);
}

要将字符串截断为特定长度,请在JavaScript中使用以下单线性箭头函数:

const truncate = (str, len) => str.slice?.(0, len);
    
console.log(truncate("Hello, World!", 5));
// Expected Output: Hello

上面的函数使用string .prototype.slice方法,该方法获取字符串的一个块,并将其作为一个新字符串返回,而不改变原始字符串。

是的,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;
};
var str = "Anything you type in.";
str.substring(0, 5) + "" //you can type any amount of length you want

这里有一个你可以使用的方法。这是FreeCodeCamp挑战之一的答案:

function truncateString(str, num) {
  if (str.length > num) {
    return str.slice(0, num) + "...";
  } else {
    return str;
  }
}