[Javascript] Fonction de tronquage

Résolu
Arkha -  
nEm3sis Messages postés 722 Statut Membre -
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. nEm3sis Messages postés 722 Statut Membre 113
     
    ç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
  2. adns Messages postés 1152 Statut Membre 153
     
    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....
    0
  3. Arkha
     
    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é :)
    0
  4. adns Messages postés 1152 Statut Membre 153
     
    oki ...

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

    Adns
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. adns Messages postés 1152 Statut Membre 153
     
    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
    0
  7. adns Messages postés 1152 Statut Membre 153
     
    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
    0
  8. Arkha
     
    Merci beaucoup adns et nEm3sis,

    nEm3sis c'est en effet ce que je cherchais à faire
    après quelques petites modifications se sera top!
    0
  9. Arkha
     
    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...
    0
    1. nEm3sis Messages postés 722 Statut Membre 113
       
      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;
      }
      ?>
      0
  10. nEm3sis Messages postés 722 Statut Membre 113
     
    ravi de t'avoir aidé =)
    0