Evitar que el substring me corte la palabra

Iniciado por yoelrodguez, 14 Febrero 2017, 18:15 PM

0 Miembros y 1 Visitante están viendo este tema.

yoelrodguez

Hola a todos:

Tengo la siguiente situación, tengo un párrafo el cual estoy cargando de forma dinámica.  En el cual se me están cortando las palabras al final. Quisiera saber si existe alguna forma ,que no se me corta la palabra sino que me corte la cadena en el ultimo espacio en blanco del string.

La inserción de los texto lo estoy haciendo con jquery les dejo el código a continuación y el ejemplo de lo que esta sucediendo.

Código (javascript) [Seleccionar]
lon = Math.round(xa.length / 82);
for(i= 0; i < lon ; i++){
texto = '';
//Extraemos los contenidos para formar el párrafo dinamico.
if(i == 0){
texto = xa.substr(0,82);
$("#div"+i).addClass('txt-mitad2');
$("#texto1").html(texto);
}else{
len = 82 * i;
p = i - 1;
texto = xa.substr(len,82);
$("#div"+p).addClass('txt-mitad2');
$( '<div class="row show-grid" id="div'+i+'"  style="margin-top: 10px"><div class="span10" >'+texto+'</div></div>' ).insertAfter( "#div"+p );
}
}


Texto con el error color rojo:

CitarEs un hecho establecido hace demasiado tiempo que un lector se distraerá con el co
ntenido
del texto de un sitio mientras que mira su diseño. El punto de usar Lorem
Ipsum es que tiene una distribución más o menos normal de las letras, al contrario
de usar textos como por ejemplo Contenido aquí, contenido aquí . Estos textos hac
en
parecerlo un español que se puede leer. Muchos paquetes de autoedición y editor
es de páginas web usan el Lorem Ipsum como su texto por defecto, y al hacer una
squeda
de Lorem Ipsum va a dar por resultado muchos sitios web que usan este texto
si se encuentran en estado de desarrollo. Muchas versiones han evolucionado a tra
vés
de los años, algunas veces por accidente, otras veces a propósito (por ejemplo
insertándole humor y cosas por el estilo).

#!drvy

Hola,

Lo suyo seria que compruebes si el caracter que vas a cortar es un espacio u otra cosa. Y en caso de ser otra cosa, vuelvas para atras hasta el ultimo espacio. Hay muchas funciones por ahi para hacer text wrap.

Por ejemplo:

Código (php) [Seleccionar]
function cortarTexto(texto, inicio=0, longitud){
   var _trim = texto.substr(inicio, longitud);
   return _trim.substr(0, Math.min(_trim.length, _trim.lastIndexOf(' ')));
};

cortarTexto(texto, 0, 82);


O incluso con regex (esto te da un array con las lineas)

Código (javascript) [Seleccionar]
function cortarTexto(texto){
   return texto.trim().match('/(\S(.{0,80}\S)?)\s+/g');
};

var texto = cortarTexto(texto);

texto.forEach(function(linea, index){
   // i linea del texto...
});


Saludos

yoelrodguez

Muchas gracias por su respuesta y si me es de utilidad.

Saludos