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 :

Supprimer balises entourant un mot ?


Sujet :

JavaScript

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 72
    Points : 45
    Points
    45
    Par défaut Supprimer balises entourant un mot ?
    Bonjour à tous,

    Je vais essayer de vous expliquer ce que je souhaite faire.

    Je voudrais lorsque je sélectionne un mot dans ma page et clique sur un bouton, savoir si ce dernier se trouve ou non entouré de balises HTML, et dans le cas où il le serait supprimer ces balises.

    Voici un petit exemple : « <p>La voiture est <strong>rouge</strong>, et le bateau est bleu </p> ». Au niveau de ma page, les balises sont interprétées, je vois donc les choses comme ça : « La voiture est rouge… »

    Dans cet exemple, je voudrais en sélectionnant « rouge » :

    1/ tester si ce mot est entouré de balises HTML
    2/ Si oui, supprimer les balises HTML sans supprimer le contenu « rouge ».

    Pour au final arriver à ça : « <p>La voiture est rouge, et le bateau est bleu </p> ».

    J’ai essayé de faire ça via la fonction suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    // Bouton CLICK
        $('input[type=button].btn_transform').click(function(){
     
    var selObj = window.getSelection();    
            var parent=selObj.anchorNode.parentNode;
     
            if (parent.nodeName=='STRONG'){       
               parent.removeChild(selObj.anchorNode);
                var theText = document.createTextNode(selObj);
                parent.appendChild(theText);             
            }
        });

    La détection à savoir si le mot est entouré d’une balise fonctionne mais uniquement lorsque je positionne mon curseur dans le mot. Si je sélectionne le mot entier, il me détecte son parent <p>.

    Pour ce qui est de la suppression des balises, j’ai essayé tout un tas chose sans y arriver. Par exemple « removeChild » me supprime bien le contenu de ma balise, mais pas mes balises « strong ».

    Auriez vous des idées qui me permettrait de faire cela, parce que je galère vraiment sur ce point et je n’arrive pas à trouver de solution.

    Par avance merci de votre aide.

  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 : 44
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    <div id="toto">la <span style="color:red;">voiture <strong>rouge</strong> ne s'accorde pas</span> avec <i>les dessous <b>bleus</b> de ma dulcinée</i></div>
     
    <script>
     
    function getString(node){
      var ch = "";
     
      if (node.hasChildNodes){
        var child = node.firstChild;
        do{
          if (child.nodeName == "#text"){
            ch += child.data;
          }
          else{
            ch += getString(child);
          }
        }
        while (child = child.nextSibling);
      }
     
      return ch;
    }
     
    alert(getString(document.getElementById("toto")));
     
    </script>

  3. #3
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 658
    Points
    66 658
    Billets dans le blog
    1
    Par défaut
    un insertBefore du node sur le parent suffirait
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  4. #4
    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 : 44
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    au temps pour moi, je comprenais qu'il voulait récupérer la chaîne mais sans pêter le DOM

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 72
    Points : 45
    Points
    45
    Par défaut
    Merci à vous pour vos conseils.

    Est ce que l'un d'entre vous pourait me montrer l'application du insertBefore svp, parce que j'ai essayé mais ça me donne rien, je dois pas faire comme il faut.

  6. #6
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 658
    Points
    66 658
    Billets dans le blog
    1
    Par défaut
    un exemple sasn se soucier de selection:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <script type="text/javascript">
    function foo(){
    var selObj = document.getElementById('bar').firstChild
            var selparent=selObj.parentNode;
     
             if (selparent.nodeName.toLowerCase()=='strong'){       
    					selparent.parentNode.insertBefore(selObj,selparent)
    					}
    			}
     
    </script>
    </head>
     
    <body>
    <p>La voiture est <strong id="bar" >rouge</strong>, et le bateau est bleu </p>
    <input type='button' onclick='foo()' value="go" />
    </body>
     
    </html>
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 551
    Points : 264
    Points
    264
    Par défaut
    Voila 2 fonctions qui pourront peut-être t'aider, elles me permettent de calculer le nombre de mots d'un bloc contenant des balises HTML, donc ca enlève les balises HTML avant de compter les mots:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    cnt(stripHTML(document.send_page.areaText.value)) ;
     
    function stripHTML(oldString) {
      var newString = '';
      var inTag = false;
      for(var i = 0; i < oldString.length; i++) {
        if(oldString.charAt(i) == '<') inTag = true;
          if(oldString.charAt(i) == '>') {
            if(oldString.charAt(i+1)=='<') {
              //dont do anything
    	} else {
              inTag = false;
    	  i++;
          }
        }
        if(!inTag) newString += oldString.charAt(i);
      }
      return newString;
    }
    function cnt(text) {
      var text=text + ' ';
      var iwhitespace = /^[^A-Za-z0-9]+/gi; // remove initial whitespace
      var left_trimmedStr = text.replace(iwhitespace, '');
      var na = rExp = /[^A-Za-z0-9ÀÂÇÈÉÊËÎÔÙÛàâçèéêëîôùû]+/gi; // non alphanumeric characters
      var cleanedStr = left_trimmedStr.replace(na, ' ');
      var splitString = cleanedStr.split(' ');
      var word_count = splitString.length -1;
      window.parent.document.getElementById('SPAN_count_words').innerHTML = word_count ;
    }
    C'est des regexp et moi j'y capte pas grand chose, mais ca t'aidera peut-être ;-)

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 72
    Points : 45
    Points
    45
    Par défaut
    Impeccable merci à tous, je vais pouvoir m'en sortir avec vos indications !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Supprimer des logins et mots de passes
    Par MJ_13 dans le forum Windows XP
    Réponses: 3
    Dernier message: 06/01/2009, 14h35
  2. [RegEx] Supprimer balise
    Par Fiquet dans le forum Langage
    Réponses: 21
    Dernier message: 23/02/2007, 12h16
  3. supprimer balise <img>
    Par alexmorel dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 22/10/2006, 10h55
  4. [MySQL] supprimer balises html
    Par nicerico dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 17/09/2006, 22h49
  5. supprimer balises html/css
    Par fr8ncky dans le forum Langage
    Réponses: 6
    Dernier message: 30/11/2005, 14h12

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