Tronquer le paragraphe premier 100 caractère et masquer le reste contenu du paragraphe montrer/masquer le reste contenu avec plus / moins de lien

j'ai un paragraphe qui a plus de 500 caractères. Je veux seulement un caractère initial de 100 et cacher le reste. Aussi je veux insérer" Plus " lien à côté de 100 caractère. Sur le clic de plus de paragraphe de lien entier devrait afficher et éditer le texte "plus" à "moins" et sur le clic "moins" il devrait basculer le comportement. Le paragraphe est généré dynamiquement Je ne peux pas envelopper le contenu de lui en utilisant .envelopper.)( Voici un exemple de ce que j'AI et de ce que je veux.

C'est ce que j'ai :

  <p>It is a long established fact that a reader will be distracted by the readable 
   content of a page when looking at its layout. The point of using Lorem Ipsum is that
   it has a more-or-less normal distribution of letters, as opposed to using 'Content 
  content here', making it look like readable English. Many desktop publishing packages 
   and web page editors now use Lorem Ipsum as their default model text.</p>

C'est ce que je veux quand DOM charge

 <p>It is a long established fact that a reader will be distracted by ..More</p>

C'est ce que je veux quand l'utilisateur clique sur "plus"

   <p>It is a long established fact that a reader will be distracted by the readable 
   content of a page when looking at its layout. The point of using Lorem Ipsum is that
   it has a more-or-less normal distribution of letters, as opposed to using 'Content 
  content here', making it look like readable English. Many desktop publishing packages 
   and web page editors now use Lorem Ipsum as their default model text. ..Less</p>

lorsque nous cliquons sur" moins", il devrait revenir sur ce que le clic" Plus " a fait.

j'utilise jQuery pour fendre, trancher et envelopper le substrat dans une portée que je veux cacher mais qui ne fonctionne pas.

var title = $("p").text();
var shortText = jQuery.trim(title).substring(100, 1000).split(" ")
    .slice(0, -1).join(" ") + "...More >>";
shortText.wrap('</span>');
16
demandé sur Raj Mehta 2012-07-10 20:15:03

6 réponses

Violon: http://jsfiddle.net/iambriansreed/bjdSF/

jQuery:

jQuery(function(){

    var minimized_elements = $('p.minimize');
    var minimize_character_count = 100;    

    minimized_elements.each(function(){    
        var t = $(this).text();        
        if(t.length < minimize_character_count ) return;

        $(this).html(
            t.slice(0,minimize_character_count )+'<span>... </span><a href="#" class="more">More</a>'+
            '<span style="display:none;">'+ t.slice(minimize_character_count ,t.length)+' <a href="#" class="less">Less</a></span>'
        );

    }); 

    $('a.more', minimized_elements).click(function(event){
        event.preventDefault();
        $(this).hide().prev().hide();
        $(this).next().show();        
    });

    $('a.less', minimized_elements).click(function(event){
        event.preventDefault();
        $(this).parent().hide().prev().show().prev().show();    
    });

});​
36
répondu iambriansreed 2012-07-10 16:42:00

ce n'est pas un résultat Top google, mais j'ai utilisé le jQuery Expander plugin à un grand succès. C'est sympa parce que ça ne cache rien aux robots des moteurs de recherche.

4
répondu Zach M. 2016-10-14 15:03:28

Merci à @iambriansreed pour sa belle fonction, voici une légère modification à tronquer le paragraphe sur les breakes en ligne:

<script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
<script>
jQuery(function(){

var minimized_elements = $('p.minimize');
var maxLines = 20;

minimized_elements.each(function(){    
    // var textArr = $(this).text().split(/\n/); // Not supported in IE < 9
    var textArr = $(this).html().replace(/\n?<br>/gi,"<br>").split(/<br>/);
    var countLines = textArr.length;

    if (countLines > maxLines) {
        text_less = textArr.slice(0, maxLines).join("<br>");
        text_more = textArr.slice(maxLines, countLines).join("<br>");
    }
    else return;

    $(this).html(
        text_less + '<span>... </span><a href="#" class="more">More</a>'+
        '<span style="display:none;">'+ text_more +' <a href="#" class="less">Less</a></span>'
    );
}); 

$('a.more', minimized_elements).click(function(event){
    event.preventDefault();
    $(this).hide().prev().hide();
    $(this).next().show();        
});

$('a.less', minimized_elements).click(function(event){
    event.preventDefault();
    $(this).parent().hide().prev().show().prev().show();    
});

});

</script>
3
répondu Noam Manos 2013-11-11 16:11:50

il semble que quelques autres personnes m'ont devancé, Mais voici ce que j'ai inventé.

var MORE = "... More...",
    LESS = " Less...";

$(function(){
    $("p").each(function(){
        var $ths = $(this),
            txt = $ths.text();

        //Clear the text
        $ths.text("");

        //First 100 chars
        $ths.append($("<span>").text(txt.substr(0,100)));

        //The rest
        $ths.append($("<span>").text(txt.substr(100, txt.length)).hide());

        //More link
        $ths.append(
            $("<a>").text(MORE).click(function(){
                var $ths = $(this);

                if($ths.text() == MORE){
                    $ths.prev().show();
                    $ths.text(LESS);
                }
                else{
                    $ths.prev().hide();
                    $ths.text(MORE);
                }
            })
        );
    });
});
2
répondu illTyped 2012-07-10 16:55:45

Avez-vous regardé l' jQuery Truncator plugin?

il fait à peu près exactement ce que vous avez décrit.

2
répondu Brandon 2016-04-22 15:34:17

pour tous ceux qui sont venus ici à la recherche de show more... Voici un autre plugin http://viralpatel.net/blogs/dynamically-shortened-text-show-more-link-jquery/

0
répondu Kundan Singh 2015-01-07 15:16:37