IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

[DOM] Split d'un innerHTML multilignes


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Avatar de Amnesiak
    Profil pro
    Inscrit en
    Août 2002
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2002
    Messages : 137
    Par défaut [DOM] Split d'un innerHTML multilignes
    Bonjour à tous,

    Supposons qu'une page contienne un élément dont le texte s'étale sur plusieurs lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <div id="demo">
    line1
    line2
    line3
    </div>
    Si je souhaite en extraire le contenu et le découper pour en séparer chaque ligne, il m'a semblé logique de faire tout simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <script type="text/javascript">
    var text = document.getElementById('demo').innerHTML;
    var split = text.split(/\r\n|\r|\n/);
    alert('Nombre de lignes:'+split.length);             
    </script>
    Le résultat est OK sous Firefox, Opera, Chrome et Safari. Par contre IE pose problème, dans le sens ou le split ne retourne qu'une seule ligne. Quelqu'un a-t-il une autre idée pour réaliser la découpe ?

    Merci d'avance !

  2. #2
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Par défaut
    salut
    remplace ton expression régulière par

  3. #3
    Membre confirmé
    Avatar de Amnesiak
    Profil pro
    Inscrit en
    Août 2002
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2002
    Messages : 137
    Par défaut
    Salut,

    Merci pour ta réponse ! J'avais déjà essayé cette possibilité, mais j'ai oublié de préciser dans mon exemple ci-dessus que les lignes peuvent contenir des caractères d'espacement, aussi bien que d'autres caractères spéciaux... désolé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <div id="demo">
    line (1) ?
    line #2...
    line [3] !!
    </div>
    J'ai donc bien peur qu'il s'agisse plutôt d'un problème d'expression régulière...
    Ne pourrait-on pas ajouter à ton expression une exception pour le caractère "espace" et le "tab" ? Ca devrait faire l'affaire non ?

  4. #4
    Membre confirmé
    Avatar de Amnesiak
    Profil pro
    Inscrit en
    Août 2002
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2002
    Messages : 137
    Par défaut
    Après de longues recherches, il semblerait qu'il ne s'agisse pas simplement d'un problème d'expression régulière, mais plutôt d'une particularité d'Internet Explorer dans la manière dont son parser DOM gère les espaces et les retours à la ligne.

    J'ai eu beau tester diverses méthodes d'accès aux données, mais sans succès :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    text = document.getElementById('demo').element.childNodes[0].data; // acces DOM
    text = document.getElementById('demo').element.childNodes[0].nodeValue;
    text = $('demo').get('html'); // MooTools
    La seule alternative compatible multi-browsers que j'ai trouvée consiste à englober mon <div> dans un élément <pre>, de telle sorte que les espaces et retours chariot soient conservés. J'ai alors logiquement pensé reproduire cette situation dynamiquement via le DOM, mais malheureusement sans succès:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var demo = document.getElementById('demo');
    var monPre = document.createElement('pre');
    demo.parentNode.appendChild(monPre);
    monPre.appendChild(demo);
    Ou même simuler le comportement d'un <pre> à l'aide des CSS... en vain.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <div id="demo" style="white-space:pre;">
    Je me trouve dès lors comme qui dirait en manque d'inspiration pour trouver une solution correcte et portable face à ce problème. Si quelqu'un a déjà eu l'occasion de se pencher là-dessus, toute idée ou retour d'expérience seront les bienvenus !

    D'avance, un grand merci !

Discussions similaires

  1. [JavaScript] [SRC]HtmlXtDom Utiliser le DOM à la place de innerHTML
    Par sekaijin dans le forum Contribuez
    Réponses: 4
    Dernier message: 02/11/2009, 18h09
  2. [DOM] Petit soucis avec innerHTML et ie
    Par dervish dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 21/11/2008, 20h17
  3. [DOM] innerHTML et <table>
    Par djayp dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 01/02/2008, 13h21
  4. [DOM] innerHTML value input firefox
    Par Teufboy dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 23/08/2007, 10h07
  5. [DOM] L'équivalent de innerHtml existe-t-il sans parser ?
    Par zefrit dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 28/09/2005, 19h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo