[Javascript] Fonction de tronquage

Résolu
Bonjour,
j'ai créé une fonction de tronquage par des "..." pour que le texte affiché ne soit pas trop volumineux

le script:

if (val.length > 7) {
   val = val.substr(0,7)+"...";
}
document.getElementById('id').innerHTML = val;

//si la valeur de val est "aaaaaaaaaaaaaaaaaaa" elle sera remplacée par "aaaaaaa..."


Jusque là tout vas bien, mais le problème est que j'aimerai que cette fonction, prenne en compte les balises HTML de cette façon:
exemple:

"123<strong>4567</strong>89" deviendra "1234567..."

au lieu de :

"123<str..."

Avez vous une idée pour m'éclairer?

Merci d'avance.
Configuration: Windows XP Internet Explorer 7.0

10 réponses

  1. bonjour

    j'ai une petite idée ^^

    tu fais une fonction qui compte les caractères entre <> tu ajoute 2 pour <> et tu augment la fonction qui tronque :)

    enfin c'est juste une idée comme ca car si entre <> il y a pas une balise html ca sera ecrit

    Adns
    ps: pas super de pouvoir écrire du html quand même....
    1. Merci adns

      J'ai déjà essayé dans cette voie là, mais il faut vraiment que la balise soit prise en compte dans l'affichage final. Je ne sais donc pas comment réafficher les balises au bon endroit après avoir tronqué le texte "brut" :/

      Pour la recopie de balise, t'en fais pas, j'ai en sorte que se soit sécurisé :)
      1. oki ...

        bah a pars parser pour recup les données affichéés je vois pas trop :S

        Adns
        1. ou peut être recupe le texte dans des variable une variable par tranche de texte ex

          123<b>456</b>789
          v1 = 123
          v2= <b>
          v3= 456
          v4 = </b>
          v5=789

          vérification de quelle variable est du texte ou une balise

          tu concatène les variables text
          tu tronque
          et apres tu fais un replace
          tu concatene premiere varivable balise avec les 2 suivante et tu remplace ;)

          je sais pas si réellement faisable mais ca peux marcher....

          Adns
          1. ça va c'est pas encore trop compliqué
            s'il te manque quelque chose n'hésite pas

            function t(s,n){for(var i=0;n&&i<s.length;n--,i++)while(s.charAt(i)=='<')i=s.indexOf('>',i)+1;return i<s.length?s.slice(0,i)+'...':s}


            et tu l'appelle comme ça, la fonction, par exemple si tu ne veux que 6 caractères :
             t('123<strong>45</strong>6789', 6)


            edit :
            j'y pense ça prend pas en compte les balise html mais tout simplement tout ce qui commence par < et termine par >
            ça pose problème ?
            1. Bah je pense que ca va lui poser probleme

              si le mec veux foutre du html mais qui se trompe le contenu des balises s'affichera

              Adns
              1. Merci beaucoup adns et nEm3sis,

                nEm3sis c'est en effet ce que je cherchais à faire
                après quelques petites modifications se sera top!
                1. nEm3sis,

                  Je suis un peu désolé de te demander ça, mais connais-tu l'équivalent de la fonction que tu viens de m'écrire en php?

                  Grand merci...
                  1. oui voila je viens de te traduire la fonction en php
                    elle fonctionne pareil

                    <?php
                    function t($s,$n){
                    	for($i=0;$n&&$i<strlen($s);$n--,$i++)
                    		while($s[$i]=='<')
                    			$i=strpos($s,'>',$i)+1;
                    	return ($i<strlen($s))?substr($s,0,$i).'...':$s;
                    }
                    ?>