Ver Mensaje Individual
  #3 (permalink)  
Antiguo 08/10/2014, 17:58
Avatar de Alexis88
Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: Ocultar texto "leer mas...".

Te propongo hacerlo así:

Código HTML:
Ver original
  1. <div class = "contenido">
  2.     Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip.
  3. </div>
  4.    
  5. <div class = "contenido">
  6.     Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip.
  7. </div>

Código CSS:
Ver original
  1. .contenido{
  2.     width: 25%;
  3.     height: 45px;
  4.     overflow: hidden;
  5. }

Código Javascript:
Ver original
  1. var texto, padre;
  2. $(".contenido").each(function(){
  3.     texto = $(this).html();
  4.     this.setAttribute("data-texto", texto);
  5.     if ($(this).html().length > 75){
  6.         $(this)
  7.             .html(texto.substr(0, 75) + "...")
  8.             .append($("<label class = 'mas'>Ver más</label>"));
  9.     }
  10. });
  11.  
  12. $(".mas").on("click", function(){
  13.     padre = $(this).parent();
  14.     texto = padre.data("texto");
  15.     $(padre)
  16.         .html(texto)
  17.         .css({
  18.             width: "50%",
  19.             height: "5rem"
  20.         });
  21. });

El proceso es simple. Tengo dos <div> (puedes tener uno o más) con la clase 'contenido'. Cada uno de ellos tiene un ancho del 25% de la ventana y 45 píxeles de alto, además, he ocultado las barras de desplazamiento para evitar el desbordamiento del texto.

En el código JavaScript, declaro a las variables texto y padre, las cuales serán usadas más adelante. Enseguida, tomo al conjunto de elementos cuya clase sea 'contenido' e itero sobre dicho conjunto. En cada iteración, tomo el contenido del elemento actual y asigno al pseudo-atributo data-texto (puedes darle el nombre que quieras, como data-ejemplo, data-prueba), el valor que tomamos en la línea anterior, es decir, el texto original. Si la cantidad de caracteres que posee es mayor a 75 (por poner un ejemplo), lo recorto hasta precisamente 75 caracteres, le añado puntos suspensivos y una etiqueta <label> con la clase 'mas' y el texto 'Ver más' y asigno todo esto al elemento actual en la iteración, mas no modifico el valor originalmente tomado y asignado a texto.

Al darle clic a cualquier <label> con la clase 'mas', tomo al elemento padre (el que lo contiene) y lo asigno a la variable padre (una de las que declaré al inicio). De este elemento (el padre), tomo el valor de su pseudo-atributo data-texto y lo asigno a la variable texto (sí, la vuelvo a utilizar). A continuación, asigno como contenido al elemento padre, el texto que acabamos de obtener y modifico sus estilos para que sea más grande.

DEMO

Si deseas obtener el efecto contrario, es decir, reducir el tamaño del <div> y acortar el texto, simplemente realiza el proceso contrario, añadiendo un botón al final del texto (cuando agrandes el <div>) y, al darle clic, realizas el proceso de acortamiento del texto que hago al inicio en la condición.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand