Partage
  • Partager sur Facebook
  • Partager sur Twitter

display en fonction d'une class et non id

Sujet résolu
    16 août 2009 à 2:37:13

    Bonjour,

    je suis plutôt nouveau, et ai lu les tuto de HTML et JS.
    Je suis en train de creer mon site.

    J'ai une liste d'hotels les un apres les autres avec un texte explicatif. d'autre part j'ai 2 listes de criteres (region et categorie). Je veux en cliquant sur la region 1 n'avoir que la liste des hotels de la region 1 et idem avec les categories. Bref une recherche mutlicritere.

    Je pensais faire en gros comme cela :

    <strong>Par Region</strong><br>
    	<a onClick="fonction_region('tous');")>Tous</a><br>
    	<a onClick="fonction_region('r1');")>Region 1</a><br>
    	<a onClick="fonction_region('r2');">Region 2</a><br>
    	<a onClick="fonction_region('r3');">Region 3</a><br>
    	<br>
    <strong>Par categorie</strong><br>
    	<a onClick="fonction_categorie('tous');")>Tous</a><br>
    	<a onClick="fonction_categorie('ca1');")>Categorie 1</a><br>
    	<a onClick="fonction_categorie('ca2');">Categorie 2</a><br>
    	<a onClick="fonction_categorie('ca3');">Categorie 3</a><br>
    
    
    <div class="r1 ca2">Mon texte sur l'hotel 1</div>
    <div class="r3 ca2">Mon texte sur l'hotel 2</div>
    <div class="r1 ca3">Mon texte sur l'hotel 3</div>
    <div class="r1 ca1">Mon texte sur l'hotel 4</div>
    <div class="r2 ca2">Mon texte sur l'hotel 5</div>
    ...	
    <div class="r2 ca2">Mon texte sur l'hotel x</div>
    


    et ensuite mes 2 fonction en JS qui me permette de faire un display sur chaque div.

    questions:
    1/ est ce que j'ai vraiment inventé n'importe quoi et il existe une autre facon de faire ce que je veux faire?
    2/ si non (ouf), comment je fait pour selectionner le div en fonction de la classe (car grace aux superbes du tutaux du SdZ j'ai bien reussi a faire marche un display avec un getElementById mais dans ce cas là je peux pas)

    Bref je cherche plus a savoir ver quelle piste je dois chercher!

    Merci beaucoup
    Olivier
    • Partager sur Facebook
    • Partager sur Twitter
      16 août 2009 à 2:49:53

      Utilise cette fonction :

      function gebcn(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
        }
      }
      


      Elle te permet de récupérer un array contenant les éléments HTML de la class que tu recherches.

      Donc dans ton cas, tu pourra récupérer tes divs de class r1 en faisant :
      gebcn("r1")

      (Note : le résultat de cette fonction est toujours un array ! ;) )
      • Partager sur Facebook
      • Partager sur Twitter
        16 août 2009 à 4:19:47

        Genial ca marche ! et en plus j'ai compris le code (ca a pas été simple je vous l'assure :p )

        merci
        • Partager sur Facebook
        • Partager sur Twitter

        display en fonction d'une class et non id

        × 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