Cortar texto con JS

Hay veces en las que se quiere cortar un texto sin cortar por la mitad de una palabra, por ejemplo cuando usamos AJAX y queremos mostrar solo un par de líneas de la entrada de una noticia. Hay dos maneras de hacer esto: la primera (y quizá la más simple, pero no la mejor) es hacerlo en el servidor antes de que este devuelva los resultados al AJAX, pero en este caso nos podemos encontrar con que luego necesitamos el texto completo y eso implicaría una nueva llamada y con ello consumo de recursos.

Entonces nos queda la segunda opción: cortarlo según lo necesitemos en el script antes de mostrarlo. Para ello he escrito esta pequeña función que hace justamente eso. Recorta una cadena determinada a un largo determinado, sin cortar palabras por la mitad y con eso el texto queda un poco más presentable.

  1. function trimText(string, largo)
  2.  {
  3.    largo = largo-3;
  4.    var newst = string.split(" ");
  5.    var contador = 0;
  6.    var finalstr = '';
  7.  
  8.    for(var lar=0; lar<newst.length; ++lar) {
  9.     if(contador >= largo)
  10.       break;
  11.     else
  12.      {
  13.       contador += newst[lar].length;
  14.       finalstr += newst[lar]+' ';
  15.       if(finalstr.length-1 > largo)
  16.        {
  17.         finalstr = finalstr.substr(0, finalstr.indexOf(newst[lar], 0));
  18.         break;
  19.        }
  20.      }
  21.    }
  22.   return (finalstr != string) ?
  23.          finalstr.substr(0, finalstr.length-1)+'…' :
  24.          finalstr;
  25.  }

Y para llamarla:

  1. var texto = 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Pellentesque sit amet nibh non metus bibendum sagittis. Suspendisse ante ligula, varius eu, ultrices sit amet, scelerisque vel, orci.'
  2. var texto_cortado = trimText(texto, 50);

Listo, un mejor texto recortado.