Mostrar más o menos contando palabras

KoNGo

Hola,

Tengo este script, que me funciona bien, pero me muestra más o menos contenido en función de los caracteres que cuenta. En este caso 100 caracteres. Alguno me echa una mano para adaptarlo contando palabras en lugar de caracteres? He estado probando y no lo consigo hacer funcionar. Seguramente sean dos chorradas de lineas, a ver si alguno me ayuda!

$(document).ready(function() {
    
if ($(window).width() < 769) { var showChar = 100; var ellipsestext = "..."; var moretext = "+ more"; var lesstext = "- less"; $('.more-text').each(function() { var content = $(this).html(); if(content.length > showChar) { var c = content.substr(0, showChar); var h = content.substr(showChar-0, content.length - showChar); var html = c + '<span class="moreellipses">' + ellipsestext+ '&nbsp;</span><span class="morecontent"><span>' + h + '</span>&nbsp;&nbsp;<a href="" class="morelink">' + moretext + '</a></span>'; $(this).html(html); } }); $(".morelink").click(function(){ if($(this).hasClass("less")) { $(this).removeClass("less"); $(this).html(moretext); } else { $(this).addClass("less"); $(this).html(lesstext); } $(this).parent().prev().toggle(); $(this).prev().toggle(); return false; }); } });
vincen
content.split(/\s+/).length;

prueba a ver.

Edit: Pero ten encuenta que el " var content = $(this).html(); " te coge el html sin "renderizar" tal y como lo ves en el bloc de notas, igual deberias coger el contenido de un div o algo.

2 respuestas
1 comentario moderado
KoNGo

#2 Sustituyo eso que pones, pero no me funciona. Quizá lo pongo donde no es, no sé. No soy experto que digamos en esto

1 respuesta
vincen

#4

if(content.length > showChar) {

por

if(content.split(/\s+/).length > showChar) {

Lo has hecho así? o has puesto el punto y coma? xD

Tienes que sustituir todos los "content.length" por "content.split(/\s+/).length"

Vashealer

#1 Por lo que veo iteras sobre un elemento con clase .more-text y coges su html plano. Estás seguro que quieres hacer eso e iterar sobre su contenido como te comentan en #2??

por ejemplo si tienes :

<p class="my-p"> hola </p>

y quieres obtener sólo el texto deberías usar la función text().

Una vez tengas el contenido en una string simplemente puedes splitear por espacios y contar los elementos.

"mi contenido".split(" ").length
2

saludos

Usuarios habituales

  • Vashealer
  • vincen
  • KoNGo
  • rellovent196