Partage
  • Partager sur Facebook
  • Partager sur Twitter

[jQuery] Une sélection spéciale

find() wrap() addClass()

Sujet résolu
    6 novembre 2010 à 14:53:02

    Bonjour,

    Je bloque sur un sélecteur assez difficile.

    Je veux sélectionner tous les mots "false" qui se trouvent dans les <td> d'un tableau pour ensuite les entourer de span puis ajouter une class à ce span.

    J'ai bien évidemment essayé, j'arrive à obtenir le <td> dans lequel il y a le mot "false".

    $('.summary').find('td:contains("false")').addClass('false');
    


    Je sais que pour englober il faut faire un .wrap() et ensuite lui faire un addClass().
    Seulement je n'arrive pas à sélectionner chaque "false".

    Dans les <td> il peut y avoir autre chose que "false", ce n'est pas l'unique donnée.


    Exemple :
    <td>valeur : false</td>
    doit donner
    <td>valeur : <span class="false">false</span></td>

    Merci par avance. :)
    • Partager sur Facebook
    • Partager sur Twitter
      6 novembre 2010 à 15:12:11

      Perso, j'aurais plutôt fait quelque chose comme ça :
      $('.summary td:contains("false")').html(function(i,html) {
        var index = html.indexOf('false');
        return html.substring(0,index)+'<span class="false">false</span>'+html.substring(index+5);
      });
      
      • Partager sur Facebook
      • Partager sur Twitter
        6 novembre 2010 à 15:20:57

        Merci mais je n'ai pas vraiment le résultat escompté.

        Il y a un élément que j'ai oublié d'ajouter dans mon premier post, dans un <td> il peut y avoir plusieurs fois le mot "false".

        Donc ton code m'ajoute bien la class seulement sur le premier "false" du <td> parcouru.
        En plus de ça j'aimerais que tu m'expliques ton futur code stp.

        :)
        • Partager sur Facebook
        • Partager sur Twitter
          6 novembre 2010 à 15:52:04

          Bon bah du coup comme ça c'est encore plus simple :

          $('.summary td:contains("false")').html(function(i,html) {
            return html.replace(/\bfalse\b/g,'<span class="false">false</span>');
          });
          


          Pour comprendre le code, ne suffit-il pas que tu ailles lire la doc de jQuery concernant la fonction html() ?
          • Partager sur Facebook
          • Partager sur Twitter
            6 novembre 2010 à 16:29:23

            Oui c'est ça. N'y aurait-il pas une autre méthode autre que les regex ? Avec les fonctions données dans le titre de mon sujet ?

            Encore merci...
            • Partager sur Facebook
            • Partager sur Twitter
              6 novembre 2010 à 17:08:25

              Bah je n'ai pas l'impression que tu puisses aisément créer des noeuds de texte avec jQuery... donc je pense que la regexp, c'est plus simple.
              • Partager sur Facebook
              • Partager sur Twitter
                6 novembre 2010 à 18:16:17

                Ok merci. J'en profite au lieu de créer un autre sujet. Avec les regexp comment sélectionner tous les nombres et leur appliquer une classe ? Un truc genre [0-9]...
                • Partager sur Facebook
                • Partager sur Twitter
                  6 novembre 2010 à 18:22:31

                  Ouais, un truc comme ça.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    6 novembre 2010 à 19:03:49

                    $('.summary td').html(function(i,html) {
                    	return html.replace(/\d+/,'<span class="int">1</span>');
                    });
                    


                    Je n'y arrive pas, j'ai mis "1" dans le span car je ne sais comment récupérer la valeur qui a été remplacée. De plus cette regexp ne prend pas les 0. Je te remercie.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      7 novembre 2010 à 2:26:56

                      Il serait temps d'apprendre à utiliser la fonction replace(), non ?

                      $('.summary td').html(function(i,html) {
                      	return html.replace(/(\d+)/g,'<span class="int">$1</span>');
                      });
                      


                      \d prend parfaitement en compte les 0.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        7 novembre 2010 à 13:13:39

                        Merci. Les Regexp sont ma bête noire...
                        • Partager sur Facebook
                        • Partager sur Twitter
                          7 novembre 2010 à 13:15:41

                          Allons, un peu d'entraînement et elles deviendront tes meilleures amies.
                          • Partager sur Facebook
                          • Partager sur Twitter

                          [jQuery] Une sélection spéciale

                          × 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