Partage
  • Partager sur Facebook
  • Partager sur Twitter

JS - Vider texte balise sans supp. sa balise fille

Supprimer texte d'une balise html sans supprimer sa balise fille

Sujet résolu
    15 septembre 2017 à 12:54:03

    Bonjour à tous, 

    j'essaie de supprimer le texte d'une balise <em>, en conservant une autre balise <em> (et son contenu) à l'intérieur de cette première.

    Avec le code c'est plus clair : 

    <em class="balise_a_vider">
        Texte à supprimer avec JS
        <em class="balise_a_conserver">
            Texte à conserver ainsi que toutes les balises html de ce code !
        </em>
    </em>

    Pour l'instant j'ai le code suivant, mais je ne sais pas si cela vaut grand chose : 

    $(".balise_a_vider").each(function(i) {
        var baliseVide = $(this).html();
        var baliseTexte = document.getElementByClass("balise_a_conserver");
        $(this).innerHTML(baliseTexte);
    });

    Normalement je sais comment vider une balise html, mais pas en conservant certains éléments.

    Merci à vous pour votre aide.

    Laurent Leruste

    -
    Edité par Insigni 16 septembre 2017 à 11:53:08

    • Partager sur Facebook
    • Partager sur Twitter
    Insigni.fr - Création de sites web WordPress & SEO à Lille
      15 septembre 2017 à 12:59:34

      Met juste ton texte a supprimer dans un div pour pouvoir le sélectionner facilement avec jQuery.
      • Partager sur Facebook
      • Partager sur Twitter
        15 septembre 2017 à 13:03:02

        Il s'agit d'un site WordPress, le code est généré par une extension ; je n'y ai pas accès directement.
        • Partager sur Facebook
        • Partager sur Twitter
        Insigni.fr - Création de sites web WordPress & SEO à Lille
          15 septembre 2017 à 13:23:10

          $(".balise_a_vider").each(function(i) {
              var textCons = $(".balise_a_conserver").wrap('<em class="balise_a_conserver">').parent().html();
              $(".balise_a_vider").html(textCons);
          });
          • Partager sur Facebook
          • Partager sur Twitter
            15 septembre 2017 à 15:27:10

            C'est super merci Camp0us, par contre, j'aurais apparemment dû préciser une chose, car celle-ci semble poser problème : 

            Il ne s'agit pas d'une seul balise em.balise_a_vider, mais d'une liste d'éléments (div.item), comme sur le code suivant : 

            <div class="content">
            
                <div class="item">
                    <em class="balise_a_vider">
                        Texte à supprimer avec JS
                        <em class="balise_a_conserver">
                            Texte à conserver ainsi que toutes les balises html de ce code !
                        </em>
                    </em>
                </div>
                <div class="item">
                    <em class="balise_a_vider">
                        Autre texte à supprimer avec JS
                        <em class="balise_a_conserver">
                            Texte de l'élément 2 à conserver !
                        </em>
                    </em>
                </div>
                <div class="item">
                    <em class="balise_a_vider">
                        Encore un autre texte à supprimer avec JS
                        <em class="balise_a_conserver">
                            Texte de l'élément 3 à conserver !
                        </em>
                    </em>
                </div>
            
            </div><!-- content -->

            Du coup, l'opération s'exécute, mais on retrouve alors le même résultat sur toutes ces balises (le résultat de la première de la liste sans doute).

            Quel paramètre doit-on indiquer pour exécuter l'opération dans chaque élément, selon leur contenu respective ?

            -
            Edité par Insigni 16 septembre 2017 à 14:42:20

            • Partager sur Facebook
            • Partager sur Twitter
            Insigni.fr - Création de sites web WordPress & SEO à Lille
              16 septembre 2017 à 11:47:54

              J'ai essayé quelque chose de ce genre, mais ça ne fonctionne pas encore : 

              $(".balise_a_vider").each(function() {
                  var textCons = $(".balise_a_conserver").wrap('<em class="balise_a_conserver">').parent().html();
                  $(".balise_a_vider", this).html(textCons);
              })

              -
              Edité par Insigni 16 septembre 2017 à 11:52:20

              • Partager sur Facebook
              • Partager sur Twitter
              Insigni.fr - Création de sites web WordPress & SEO à Lille
                16 septembre 2017 à 13:42:41

                Salut, on peut partir du item, déplacer la balise à conserver et supprimer celle à supprimer

                $('.item').each(function () {
                    var $balise_a_conserver = $('.balise_a_conserver', this);
                    var $balise_a_vider = $('.balise_a_vider', this);
                    $(this).append($balise_a_conserver); //Déplacement
                    $balise_a_vider.remove(); //Suppression
                });

                PS: Un em dans un em, je trouve ça bizarre.

                • Partager sur Facebook
                • Partager sur Twitter
                le bienfait n'est jamais perdu
                  16 septembre 2017 à 14:40:41

                  Bonjour WillyKouassi, c'est pas mal du tout ça, merci !

                  Oui, un em dans un autre c'est pas super, mais ça j'y suis pour rien :)

                  Par contre, je perds la balise <em> parente (.balise_a_vider), je peux la réinsérer (sans son contenu) avec ton code, en faisant quelque chose de ce type (mais avec un code qui fonctionne) ? : 

                  $(this).append("<em class='balise_a_vider'>" + $balise_a_conserver + "</em>"); //Déplacement

                  Il y a le commentaire "//Déplacement", et c'est vrai que la balise n'est plus à la même place (en fin de .item), c'était pour pouvoir supprimer la première c'est bien ça ?

                  -
                  Edité par Insigni 16 septembre 2017 à 14:42:08

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Insigni.fr - Création de sites web WordPress & SEO à Lille
                    16 septembre 2017 à 15:02:17

                    Ha oui autant pour j'avais mal lu, comme ça alors.

                    $('.item').each(function () {
                        var $balise_a_conserver = $('.balise_a_conserver', this).remove(); //On la retire de son parent
                        var $balise_a_vider = $('.balise_a_vider', this).empty(); //On vide le texte du parent 
                        $balise_a_vider.append($balise_a_conserver); //On réinsère la balise à conserver
                    });

                    On peut utiliser .detach au lieu de .remove pour conserver d'éventuels événements sur .balise_a_conserver

                    Oui c'était pour sa suppression

                    -
                    Edité par WillyKouassi 16 septembre 2017 à 15:25:03

                    • Partager sur Facebook
                    • Partager sur Twitter
                    le bienfait n'est jamais perdu
                      16 septembre 2017 à 15:24:07

                      C'est parfait, un grand merci à vous !

                      Laurent

                      • Partager sur Facebook
                      • Partager sur Twitter
                      Insigni.fr - Création de sites web WordPress & SEO à Lille

                      JS - Vider texte balise sans supp. sa balise fille

                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                      • Editeur
                      • Markdown