Truncar una cadena directamente en JavaScript

Resuelto Bob asked hace 15 años • 16 respuestas

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>"
Bob avatar Aug 20 '09 00:08 Bob
Aceptado

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>"
Larsenal avatar Aug 19 '2009 17:08 Larsenal

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;
  }
}
mandrei100 avatar Dec 05 '2018 17:12 mandrei100

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));
Expandir fragmento

Sam Logan avatar Aug 28 '2019 08:08 Sam Logan

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);
}
bobince avatar Aug 19 '2009 18:08 bobince