将字符串直接截断为JavaScript

relj7zay  于 2022-09-18  发布在  Java
关注(0)|答案(3)|浏览(178)

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

以下是我得到的信息:

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

myzjeezk1#

使用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>"
but5z9lq

but5z9lq2#

这里有一种你可以使用的方法。这是对Free CodeCamp挑战之一的回答:

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

shyt4zoc3#

是的,子串。您不需要使用索引长度大于字符串结束于原始长度的长度的Math.min;子字符串。

但!

document.getElementById("foo").innerHTML = "<a href='" + pathname +"'>" + pathname +"</a>"

这是个错误。如果Document.Referrer中有撇号怎么办?或在HTML中具有特殊含义的各种其他字符。在最坏的情况下,Referrer中的攻击者代码可能会向您的页面注入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);
}

相关问题