Partage
  • Partager sur Facebook
  • Partager sur Twitter

getElementById mais pour les class, ça existe?

Sujet résolu
    6 juillet 2010 à 19:29:03

    Bonsoir,

    je voulais savoir s'il existe une fonction comme getElementById mais pour les class ?

    Merci :)
    • Partager sur Facebook
    • Partager sur Twitter
    :)
    Anonyme
      6 juillet 2010 à 20:15:45

      document.getElementsByClassName(), et cherches une alternative pour IE6/7, c'est quelque part sur le forum :)
      • Partager sur Facebook
      • Partager sur Twitter
        7 juillet 2010 à 0:37:18

        Bon j'ai effectué une recherche.
        Je suis tombé sur se script : http://tillerfolio.fr/SdZ/index.php?s=1
        donc voici se que j'ai dans mon fichier script.js

        // getElementsByClassName compatible tous browsers
        // paramètre cl : class recherchée(s)
        // paramètre par : noeud parent (optionnel) 
        // MAJ 24/06/09 : Prend en compte la recherche de plusieurs class. 
        function prive_getElementsByClassName(cl,par) {   
        	par = par || document; // Si aucun noeud parent précisé, on prend le document   
        	if(par.getElementsByClassName) {  // Si la méthode getElementsByClassName est implémentée    
        		return par.getElementsByClassName(cl); // On l'utilise pour renvoyer le résultat 
        	} 
        	else { // sinon    
        		 var all = par.getElementsByTagName("*"), // On récupère tous les noeuds enfants du parent   
        		 arr_cl = cl.split(" "), // On crée un tableau contenant les class recherchées   
        		 res = []; // On crée un tableau vide pour accueillir les résultats    
        		 for(var i=0,l=all.length;i<l;i++) { // Pour chaque noeud enfant          
        			 var ok = true;  // On initialise un booléen de vérification
        			 for(var j=0,m=arr_cl.length;j<m;j++) { // Pour chaque class recherchée        
        				 var reg = new RegExp("\s?"+arr_cl[j]+"\s?");  // on crée une RegExp adaptée       
        				 if(!reg.test(all[i].className)) { // on teste la RegExp sur l'attribut class et s'il ne contient pas la class recherchée          
        					 ok = false; // on passe le booléen à false         
        					 break; // et on sort de la boucle       
        				 }      
        			 }      
        			 if(ok) { // Si le noeud possède toutes les class recherchées        
        				res.push(all[i]); // on l'ajoute au résultat     
        			 }    
        		 }    
        		 return res; // A la fin, on renvoie le résultat  
        	 }
         }
        


        voici comment je l'utilise :

        <script src="script.js" type="text/javascript"></script>
        <form method="post" action="ajout-supprime.php" name="ajout_membre">
        <table border="0" cellpadding="0" cellspacing="0" align=center >
          <tbody>
            <tr>
              <td style="width: 104px; text-align: center;">Nom :</td>
              <td style="width: 252px;"><input name="nom" value="" type="text" /></td>
            </tr>
            <tr>
              <td style="width: 104px; text-align: center;">Mot de passe :</td>
              <td style="width: 252px;"><input name="pass" value="" type="password" /></td>
            </tr>
            <tr>
              <td style="width: 104px; text-align: center;">Rang :</td>
              <td style="width: 252px;">
        		  <input name="rang_assign[]" value="10" type="checkbox" class="rang" />Ec<br />
        		  <input name="rang_assign[]" value="20" type="checkbox" class="rang" />av<br />
        		  <input name="rang_assign[]" value="30" type="checkbox" class="rang" />Ev<br />
        		  <input name="rang_assign[]" value="31" type="checkbox" class="rang" />Evs<br />
        		  <input name="rang_assign[]" value="32" type="checkbox" class="rang" />Anim’Enfants <br />
        		  <input name="rang_assign[]" value="35" type="checkbox" class="rang" />Evd<br />
        		  <input name="rang_assign[]" value="01" type="checkbox" class="rang" />Nouveaut<br />
        		  <input name="rang_assign[]" value="02" type="checkbox" class="rang" />gest<br />
        		  <input name="rang_assign[]" value="03" type="checkbox" class="rang_web" />Dro<br />
              </td>
            </tr>
            <tr>
              <td style="width: 252px; text-align: center;" colspan="2" rowspan="1"><input name="envoyer"
         value="Ajouter" type="submit" /></td>
            </tr>
          </tbody>
        </table>
        </form>
        <script type="text/javascript">
        	if(document.ajout_membre.prive_getElementsByClassName("rang_web").checked)
        	{
        		document.ajout_membre.prive_getElementsByClassName("rang").disabled;
        	}
        	
        </script>
        


        Mais ça ne fonctionne pas. Mon but c'est que si la case class="rang_web" est coché qu'on ne puisse pas cocher celle qui la précède.

        Or l''outil de débogage internet explorer 8 me dit :
        if(document.ajout_membre.prive_getElementsByClassName("rang_web").checked)
        

        Citation

        Cet objet ne gère pas cette propriété ou cette méthode index.php, Ligne 335 Caractère 2



        Je ne comprend pas pourquoi. Pouvez-vous m'aider ?


        Merci :)
        • Partager sur Facebook
        • Partager sur Twitter
        :)
          7 juillet 2010 à 9:04:41

          Je ne sais pas pourquoi cela ne marche pas, mais ici tu as une seule checkbox rang_web, alors quel est l'intérêt d'utiliser une classe? Mets un id et tu seras tranquille ^^.
          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            7 juillet 2010 à 9:40:02

            T'y es pas du tout dans la syntaxe là . . .

            var elms = prive_getElementsByClassName('rang', document.ajout_membre);
            
            // Si t'as un seul élément
            elms[0].style.display = 'none';
            
            // Si t'en as plusieurs
            for (var i = 0; i < elms.length; i++) {
            	elms[i].style.display = 'none';
            }
            
            • Partager sur Facebook
            • Partager sur Twitter
              8 juillet 2010 à 19:17:02

              Re-bonjour :)

              Bon ça marche toujours pas.

              le debuggueur me dit qu'il y a une erreur dans la fonction a la ligne surligné :

              // getElementsByClassName compatible tous browsers
              // param�tre cl : class recherch�e(s)
              // param�tre par : noeud parent (optionnel) 
              // MAJ 24/06/09 : Prend en compte la recherche de plusieurs class. 
              function prive_getElementsByClassName(cl,par) {   
              	par = par || document; // Si aucun noeud parent pr�cis�, on prend le document   
              	if(par.getElementsByClassName) {  // Si la m�thode getElementsByClassName est impl�ment�e    
              		return par.getElementsByClassName(cl); // On l'utilise pour renvoyer le r�sultat 
              	} 
              	else { // sinon    
              		 var all = par.getElementsByTagName("*"), // On r�cup�re tous les noeuds enfants du parent   
              		 arr_cl = cl.split(" "), // On cr�e un tableau contenant les class recherch�es   
              		 res = []; // On cr�e un tableau vide pour accueillir les r�sultats    
              		 for(var i=0,l=all.length;i<l;i++) { // Pour chaque noeud enfant          
              			 var ok = true;  // On initialise un bool�en de v�rification
              			 for(var j=0,m=arr_cl.length;j<m;j++) { // Pour chaque class recherch�e        
              				 var reg = new RegExp("\s?"+arr_cl[j]+"\s?");  // on cr�e une RegExp adapt�e       
              				 if(!reg.test(all[i].className)) { // on teste la RegExp sur l'attribut class et s'il ne contient pas la class recherch�e          
              					 ok = false; // on passe le bool�en � false         
              					 break; // et on sort de la boucle       
              				 }      
              			 }      
              			 if(ok) { // Si le noeud poss�de toutes les class recherch�es        
              				res.push(all[i]); // on l'ajoute au r�sultat     
              			 }    
              		 }    
              		 return res; // A la fin, on renvoie le r�sultat  
              	 }
               }
              


              Voici se qu'il dit :

              Citation

              Cet objet ne gère pas cette propriété ou cette méthode scripts.js



              Voici comment j'ai utilisisé la fonction :

              function rang() {
              	var elms1 = prive_getElementsByClassName(document.ajout_membre, 'rang');
              	var elm2 = prive_getElementsByClassName(document.ajout_membre, 'rang_web');
              	// Si t'as un seul élément
              	if( elms2[0].checked )
              	{
              		// Si t'en as plusieurs
              		for (var i = 0; i < elms1.length; i++) {
              			elms1[i].disabled = true;
              		}
              	}
              	else {
              			// Si t'en as plusieurs
              			for (var i = 0; i < elms1.length; i++) {
              				elms1[i].disabled = false;
              			}
              	}
              }
              


              <script src="script.js" type="text/javascript"></script>
              <form method="post" action="ajout-supprime.php" name="ajout_membre">
              <table border="0" cellpadding="0" cellspacing="0" align=center >
                <tbody>
                  <tr>
                    <td style="width: 104px; text-align: center;">Nom :</td>
                    <td style="width: 252px;"><input name="nom" value="" type="text" /></td>
                  </tr>
                  <tr>
                    <td style="width: 104px; text-align: center;">Mot de passe :</td>
                    <td style="width: 252px;"><input name="pass" value="" type="password" /></td>
                  </tr>
                  <tr>
                    <td style="width: 104px; text-align: center;">Rang :</td>
                    <td style="width: 252px;">
              		  <input name="rang_assign[]" value="10" type="checkbox" class="rang" />Ec<br />
              		  <input name="rang_assign[]" value="20" type="checkbox" class="rang" />av<br />
              		  <input name="rang_assign[]" value="30" type="checkbox" class="rang" />Ev<br />
              		  <input name="rang_assign[]" value="31" type="checkbox" class="rang" />Evs<br />
              		  <input name="rang_assign[]" value="32" type="checkbox" class="rang" />Anim’Enfants <br />
              		  <input name="rang_assign[]" value="35" type="checkbox" class="rang" />Evd<br />
              		  <input name="rang_assign[]" value="01" type="checkbox" class="rang" />Nouveaut<br />
              		  <input name="rang_assign[]" value="02" type="checkbox" class="rang" />gest<br />
              		  <input name="rang_assign[]" value="03" type="checkbox" class="rang_web" onclick="rang()" />Dro<br />
                    </td>
                  </tr>
                  <tr>
                    <td style="width: 252px; text-align: center;" colspan="2" rowspan="1"><input name="envoyer"
               value="Ajouter" type="submit" /></td>
                  </tr>
                </tbody>
              </table>
              </form>
              


              Pouvez-vous m'aider ?

              Merci bien :)
              • Partager sur Facebook
              • Partager sur Twitter
              :)
              Anonyme
                8 juillet 2010 à 19:42:12

                tiller s'est troué dans son exemple, faut inverser les paramètres et ça ira mieux :)
                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  8 juillet 2010 à 19:47:34

                  Pis y'a une jolie faut de synthaxe aux lignes 11 et 12 de ton premier code : une instruction se termine par ; et non , ;)
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    8 juillet 2010 à 20:40:37

                    @har : non c'est correct, on déclare plusieurs variables à la suite donc on utilise "," et pas ";".

                    L'indentation n'est pas clair sur le bout de code donc c'est moins évident.

                    Laisse tel quel Nico, sinon tu va te retrouver avec une variable globale qui traine :)
                    • Partager sur Facebook
                    • Partager sur Twitter
                      8 juillet 2010 à 22:27:28

                      Citation : nod_

                      tiller s'est troué dans son exemple, faut inverser les paramètres et ça ira mieux :)



                      T'as une preuve de ce que tu avances ? :-°
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Anonyme
                        8 juillet 2010 à 22:28:52

                        Le vieil edit de pute :p
                        • Partager sur Facebook
                        • Partager sur Twitter
                        Anonyme
                          9 juillet 2010 à 10:25:05

                          @nod_ : désolé, j'ai pas fait gaffe :(
                          • Partager sur Facebook
                          • Partager sur Twitter

                          getElementById mais pour les class, ça existe?

                          × 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