我想使用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>"
使用 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>"
length
短,substr函数的表现会很奇怪——它会返回空值。 - RozzA.toString().
将其转换为substring()
可以处理的字符串。 - not2qubit这里有一个你可以使用的方法。这是FreeCodeCamp挑战中的一个答案:
function truncateString(str, num) {
if (str.length > num) {
return str.slice(0, num) + "...";
} else {
return str;
}
}
更新的ES6版本
const truncateString = (string = '', maxLength = 50) =>
string.length > maxLength
? `${string.substring(0, maxLength)}…`
: string
// demo the above function
alert(truncateString('Hello World', 4));
是的,使用substring。你不需要进行Math.min操作;如果截取子字符串时索引大于原字符串长度,则会截取至原长度。
但是!
document.getElementById("foo").innerHTML = "<a href='" + pathname +"'>" + pathname +"</a>"
这是一个错误。如果document.referrer中有撇号或其他在HTML中具有特殊意义的字符,会怎样呢?最坏的情况是,referrer中的攻击者代码可能会注入JavaScript到您的页面中,这是一种XSS安全漏洞。
虽然可以手动转义pathname中的字符以防止发生这种情况,但这有点麻烦。最好使用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);
}
以下代码截断一个字符串,不会将单词分开,而是丢弃截断位置所在的单词。完全基于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('');
}
是的,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 limit = (string, length, end = "...") => {
return string.length < length ? string : string.substring(0, length) + end
}
limit('Hello world', 5) // Hello...
要将字符串截断到特定长度,请在JavaScript中使用以下一行箭头函数:
const truncate = (str, len) => str.slice?.(0, len);
console.log(truncate("Hello, World!", 5));
// Expected Output: Hello
String.prototype.slice
方法,该方法可以从字符串中取出一部分并返回一个新的字符串,而不改变原始字符串。?
字符。 - cak3_lovervar str = "Anything you type in.";
str.substring(0, 5) + "" //you can type any amount of length you want