ultimo - substring javascript ejemplo
Truncar una cadena directamente en JavaScript (4)
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 personajes.
Esto es lo que obtuve:
var pathname = document.referrer; //wont work if accessing file:// paths
document.getElementById("foo").innerHTML = "<a href=''" + pathname +"''>" + pathname +"</a>"
El siguiente código trunca una cadena y no dividirá palabras, y en su lugar descarta la palabra donde ocurrió el truncamiento. Totalmente basado en la fuente 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('''');
}
Pensé en darle una mención a Sugar.js . Tiene un método truncado que es bastante inteligente.
De la documentation :
Trunca una cadena. A menos que split sea verdadero, truncar no dividirá palabras, y en su lugar descartará la palabra donde ocurrió el truncamiento.
Ejemplo:
''just sittin on the dock of the bay''.truncate(20)
Salida:
just sitting on...
Use el método de substring :
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>"
sí, subcadena No necesita hacer Math.min; 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é pasa si document.referrer tenía un apóstrofo? O varios otros personajes 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, que es un agujero de seguridad XSS.
Si bien es posible escapar de los caracteres en el nombre de ruta manualmente para detener esto, es un poco molesto. Es mejor utilizar los métodos DOM que tocar las cadenas internas de HTML.
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);
}