Truncar una cadena directamente en JavaScript
Me gustaría truncar una cadena cargada dinámicamente usando JavaScript directo. Es una URL, por lo que no hay espacios y, obviamente, no me importan los límites de las palabras, solo los caracteres.
Esto es lo que obtuve:
var pathname = document.referrer; //wont work if accessing file:// paths
document.getElementById("foo").innerHTML = "<a href='" + pathname +"'>" + pathname +"</a>"
Utilice el método de subcadena :
var length = 3;
var myString = "ABCDEFG";
var myTruncatedString = myString.substring(0,length);
// The value of myTruncatedString is "ABC"
Entonces en tu caso:
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>"
Aquí tienes un método que puedes utilizar. Esta es la respuesta para uno de los desafíos de FreeCodeCamp:
function truncateString(str, num) {
if (str.length > num) {
return str.slice(0, num) + "...";
} else {
return str;
}
}
Versión ES6 actualizada
const truncateString = (string = '', maxLength = 50) =>
string.length > maxLength
? `${string.substring(0, maxLength)}…`
: string
// demo the above function
alert(truncateString('Hello World', 4));
sí, subcadena. No es necesario hacer Math.min; La subcadena con un índice más largo que la longitud de la cadena termina en la longitud original.
¡Pero!
document.getElementById("foo").innerHTML = "<a href='" + pathname +"'>" + pathname +"</a>"
Esto es un error. ¿Qué pasaría si document.referrer tuviera un apóstrofo? O varios otros caracteres que tienen un significado especial en HTML. En el peor de los casos, el código del atacante en el referente podría inyectar JavaScript en su página, lo cual es un agujero de seguridad XSS.
Si bien es posible escapar de los caracteres en el nombre de la ruta manualmente para evitar que esto suceda, es un poco molesto. Es mejor usar métodos DOM que jugar con cadenas HTML internas.
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);
}