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 :

Boucle sur collection getElementsByName


Sujet :

JavaScript

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 45
    Par défaut Boucle sur collection getElementsByName
    Bonjour,

    Je fais face à un problème de Javascript sous Internet Explorer. En fait, j'appelle une fonction JS sur un lien a href, qui affiche des éléments. J'ai un tableau tout préparé en fait, avec uniquement la première ligne affichée (les autres sont en display:none). La fonction javascript permet donc d'afficher les autres lignes si on clique sur le premier élément du tableau. Aucun souci sous Firefox mais rien ne se passe sous IE .

    Fonction Javascript :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    function afficher() {
         var groupe = document.getElementsByName("tranche");
     
    	for(i in groupe){
    		groupe[i].style.display='block';
    	}
    }
    J'ai également le même type de problème pour changer la propriété vAlign (l'alignement vertical) mais c'est moins "grave".

    Merci d'avance

  2. #2
    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 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    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 658
    Billets dans le blog
    1
    Par défaut
    la boucle for in est malvenue dans ce cas de figure ...
    tu boucles sur les propriétés de la collection ...

    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
    <div name="tranche">foo</div>
    <div name="tranche">foo</div>
    <div name="tranche">foo</div>
    <div name="tranche">foo</div>
    <div name="tranche">foo</div>
    <div name="tranche">foo</div>
    <div name="tranche">foo</div>
    <div name="tranche">foo</div>
    <div name="tranche">foo</div>
    <div name="tranche">foo</div>
    <script type="text/javascript">
    function afficher() {
         var groupe = document.getElementsByName("tranche");
     	for(i in groupe){
    		alert(i)
    	}
    }
    afficher()
    </script>
    il faut soit faire un for jusque length
    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
    <div name="tranche">foo</div>
    <div name="tranche">foo</div>
    <div name="tranche">foo</div>
    <div name="tranche">foo</div>
    <div name="tranche">foo</div>
    <div name="tranche">foo</div>
    <div name="tranche">foo</div>
    <div name="tranche">foo</div>
    <div name="tranche">foo</div>
    <div name="tranche">foo</div>
    <script type="text/javascript">
    function afficher() {
         var groupe = document.getElementsByName("tranche");
     	for(i=0;i< groupe.length){
    		alert(groupe[i].innerHTML)
    	}
    }
    afficher()
    </script>
    soit un while sur l'indexe de la collection
    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
    <div name="tranche">foo</div>
    <div name="tranche">foo</div>
    <div name="tranche">foo</div>
    <div name="tranche">foo</div>
    <div name="tranche">foo</div>
    <div name="tranche">foo</div>
    <div name="tranche">foo</div>
    <div name="tranche">foo</div>
    <div name="tranche">foo</div>
    <div name="tranche">foo</div>
    <script type="text/javascript">
    function afficher() {
         var groupe = document.getElementsByName("tranche");
         var i=-1;
     	while( groupe[++i]){
    		alert(groupe[i].innerHTML)
    	}
    }
    afficher()
    </script>
    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 !

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 45
    Par défaut
    Merci pour ta réponse.

    Mais je rencontre un souci et j'ai d'ailleurs essayé avec ton exemple simple avec des div et avec IE, il ne recupere pas les elements. C'est à dire que groupe.length =0, alors que dans Firefox ou Chrome, il remplie bien la collection ...

  4. #4
    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 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    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 658
    Billets dans le blog
    1
    Par défaut
    C'est à dire que groupe.length =0,


    heu tu peux me montrer un exemple avec le html associé ?

    name ou id ?
    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 !

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 45
    Par défaut
    J'ai repris l'exemple simple :

    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
    <html>
    <head><script type="text/javascript">
    function afficher() {
         var groupe = document.getElementsByName("tranche");
    	 alert("nb d elements " + groupe.length);
         var i=-1;
     	while( groupe[++i]){
    		alert(groupe[i].innerHTML)
    	}
    }
    </script></head>
    <body>
    <div name="tranche">foo</div>
    <div name="tranche">foo</div>
    <div name="tranche">foo</div>
    <div name="tranche">foo</div>
    <div name="tranche">foo</div>
    <div name="tranche">foo</div>
    <div name="tranche">foo</div>
    <div name="tranche">foo</div>
    <div name="tranche">foo</div>
    <div name="tranche">foo</div>
    <button onclick="afficher()">Ici</button>
     
    </body>
    </html>
    Sous Firefox et Chrome, il trouve bien les 10 éléments, mais 0 avec IE ...
    J'ai donc le même problème dans mon application

  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 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    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 658
    Billets dans le blog
    1
    Par défaut
    A priori IE cantonne l'attribut name aux éléments de formulaire de type input, textarea ...

    Colle à tes éléments un id incrémenté tranche_1 tranche_2
    et récupères la collection avec en t'inspirant de cette contribution :
    http://www.developpez.net/forums/d75...filtre-regexp/

    ou si tu utilise jquery avec un selecteur [id^=tranche_]
    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 averti
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 45
    Par défaut
    J'utilise déjà ID pour autre chose. Il n' y a pas d'autres moyens ? :/

  8. #8
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 198
    Par défaut
    Citation Envoyé par SpaceFrog
    A priori IE cantonne l'attribut name aux éléments de formulaire de type input, textarea ...
    tout à fait, IE étant rigoureux sur ce coup.
    Citation Envoyé par Gwen_59
    J'utilise déjà ID pour autre chose
    une ID doit être UNIQUE mais on peut en mettre autant que l'on veut.
    Citation Envoyé par Gwen_59
    Il n' y a pas d'autres moyens ? :/
    la méthode décrite par SpaceFrog est une bonne méthode, je parle des ID tranche_1, tranche_2...etc si l'on n'utilise pas jQuery.

    Sinon tu peux encore encapsuler ces DIV dans un parent et récupérer la collection de DIV contenues
    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
    <html>
    <head><script type="text/javascript">
    function afficher() {
      var oParent = document.getElementById('conteneur');
      var groupe  = oParent.getElementsByTagName('DIV');
      alert("nb d elements " + groupe.length);
      var i=-1;
      while( groupe[++i]){
        groupe[i].innerHTML += ' ' +(i+1);
      }
    }
    </script></head>
    <body>
      <div id="conteneur">
        <div>foo</div>
        <div>foo</div>
        <div>foo</div>
        <div>foo</div>
        <div>foo</div>
        <div>foo</div>
        <div>foo</div>
        <div>foo</div>
        <div>foo</div>
        <div>foo</div>
      </div>
      <button onclick="afficher()">Ici</button>
    </body>
    </html>

Discussions similaires

  1. [XSLT] Faire une boucle sur une variable [i]
    Par PoT_de_NuTeLLa dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 07/06/2010, 12h45
  2. Macro sur Excel/Boucle sur les lettres
    Par life is magic dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 25/11/2005, 11h56
  3. [JDBC]Boucle sur tous les éléments du ResultSet
    Par Terminator dans le forum JDBC
    Réponses: 1
    Dernier message: 22/09/2005, 19h30
  4. L'installation d'XP boucle sur elle-même
    Par pf106 dans le forum Windows XP
    Réponses: 13
    Dernier message: 20/08/2005, 14h55
  5. [MFC] Boucle sur un bouton
    Par karl3i dans le forum MFC
    Réponses: 6
    Dernier message: 17/02/2004, 11h37

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