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 :

getElementsByTagName et getElementsByName


Sujet :

JavaScript

  1. #1
    Membre actif
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2008
    Messages
    557
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2008
    Messages : 557
    Points : 286
    Points
    286
    Par défaut getElementsByTagName et getElementsByName
    Bonjour, à titre d'essai pour un soucis d'affichage avec chrome, je n'arrive pas à faire fonctionner ces 2 fonctions alors que pour getElementById, j'avais pas de soucis.

    getElementsByTagName
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function affichage_chrome(){
    var test = document.getElementsByTagName("name");
     
    for(var i=0;i<=test.length ; i++){
    test[i].style.cssText="color:red;";}
    getElementsByName
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function affichage_chrome(){
    var test = document.getElementsByName("name");
    test[0].style.cssText="color:red;"; //(je n'ai qu'une balise de ce nom) 
    }
    code html

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <div onclick="affichage_chrome()" id="test" name="test" >texte</div
    Je ne sais pas ce qui cloche, c'est la première fois que je m'en sers.

  2. #2
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Bonjour,
    contrairement à getElementsByName()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementsByTagName("name");
    fait référence au nom du tag HTML.
    Or il n'existe pas de tag HTML <name>.
    Ou alors c'est du XML mais il faudrait le préciser ...

    Par ailleursest à éviter comme tout identifiant faisant référence à un terme du langage

    A+
    Pour tout savoir sur l'utilisation du forum

    En postant votre message, n'oubliez pas les Règles du Club.

  3. #3
    Membre actif
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2008
    Messages
    557
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2008
    Messages : 557
    Points : 286
    Points
    286
    Par défaut
    Oui oui en plus je le savais mais j'ai recopié vite fait.

    C'est bien un "div" à la place de "name" dans getElementsByTagName.

    Et Merci ça fonctionne pour getElementsByTagName , en revanche, pour le getElementsByName ça ne fonctionne pas et je me demande si c'est possible d'avoir un attribut name dans un div?

    En fait je faisais ça pour éviter d'avoir à compter dans la boucle jusqu'à arriver au bon div ! Je trouve ça un peu nul.

    C'est parce qu'on mon div a un attribut class, j'en ai besoin car j'ai plusieurs div de ce type, donc je peux pas utiliser un id.

  4. #4
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Citation Envoyé par Marc22 Voir le message
    j'ai plusieurs div de ce type, donc je peux pas utiliser un id.
    Heu ... qu'est-ce qui empêche ?
    Ca serait la méthode la plus adaptée et la plus compatible avec tous les nav
    D'autant que tu sembles l'avoir déjà fait.

    EDIT :
    je me demande si c'est possible d'avoir un attribut name dans un div?
    Normalement non, ce n'est plus possible.

    A+
    Pour tout savoir sur l'utilisation du forum

    En postant votre message, n'oubliez pas les Règles du Club.

  5. #5
    Membre actif
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2008
    Messages
    557
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2008
    Messages : 557
    Points : 286
    Points
    286
    Par défaut
    Mais les id c'est pas unique? Une balise pour un seul id.

    Tandis que dans les classes, plusieurs balises peuvent avoir le même nom de class non?

  6. #6
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Citation Envoyé par Marc22 Voir le message
    Mais les id c'est pas unique? Une balise pour un seul id.
    Et même : un id une seule fois dans la page.
    Citation Envoyé par Marc22 Voir le message
    Tandis que dans les classes, plusieurs balises peuvent avoir le même nom de class non?
    Bien sur, c'est le principe.
    Et c'est en l'occurrence ce qui te pose problème.

    Mais je ne vois toujours pas pourquoi tu ne peux pas donner un id à un de ces <div> (même s'ils partagent tous les mêmes caractéristiques CSS).
    S'ils sont générés dans une boucle PHP, il suffit de concaténer un compteur à la partie fixe de l'id (en effet, rien ne t'empêche d'attribuer un id aussi aux autres div : ça sera peut être plus simple à gérer).

    A+
    Pour tout savoir sur l'utilisation du forum

    En postant votre message, n'oubliez pas les Règles du Club.

  7. #7
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    A noter que les versions récentes de la plupart des navigateurs disposent d'une méthode getElementsByClassName, du coup, tu peux prévoir un code par exemple du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function getClassName(nomClasse){
        if(document.getElementsByClassName){
            return document.getElementsByClassName(nomClasse);
        }
        else{
            var classElts = [];
            var elts = document.getElementsByTagName('*'), i = elts.length;
            while(i--){
                if(elts[i].className == nomClass){classElts.push(elts[i];}
            }
            return classElts;
        }
    }
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  8. #8
    Membre actif
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2008
    Messages
    557
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2008
    Messages : 557
    Points : 286
    Points
    286
    Par défaut
    Salut,

    ça a l'air très pratique, mais est ce normal que ça ne marche que sur chrome? j'ai IE8, et firefox 3.6.3, donc les toutes dernières versions et elles ne semblent pas connaître getElementsByClassName.

    J'ai simplement repris ton code en faisant un alert

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        if(document.getElementsByClassName){
            alert("ok");    }

  9. #9
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    j'ai IE8, et firefox 3.6.3, donc les toutes dernières versions et elles ne semblent pas connaître getElementsByClassName.
    C'est normal pour IE8, mais pour FF 3.6, tu as dû faire une erreur, ça fonctionne très bien
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  10. #10
    Membre actif
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2008
    Messages
    557
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2008
    Messages : 557
    Points : 286
    Points
    286
    Par défaut
    Bonjour,

    excusez moi de "réouvrir" le sujet, c'est pour éviter d'en créer un autre,

    sur le net, ils disent que chrome implémente getElementsByClassName, or j'ai la version à jour, mais mon

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementsByClassName('pagination')[0].style.cssText="margin-top:86%;";
    même dans une boucle.

    ça ne fonctionne pas.

    alors que sur firefox j'arrive bien à utiliser la méthode en général.

  11. #11
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    As-tu essayé d'abord de le faire afficher pour voir s'il y a une erreur d'accès ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alert(document.getElementsByClassName('pagination')[0].style.cssText);
    Dans certains cas, suivant les nav, il peut arriver que lorsqu'une collection ne comporte qu'un seul élément, ce soit l'élément lui-même qui soit retourné au lieu d'un tableau.
    as-tu essayé avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementsByClassName('pagination').style.cssText
    (ce n'est qu'une supposition)

    A+
    Pour tout savoir sur l'utilisation du forum

    En postant votre message, n'oubliez pas les Règles du Club.

  12. #12
    Membre actif
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2008
    Messages
    557
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2008
    Messages : 557
    Points : 286
    Points
    286
    Par défaut
    ah ok j'ai compris, merci E.Bzz,

    en fait c'était une ligne javascript au dessus qui ne passait pas et faisait planter le reste mais sinon effectivement ça marche aussi sur chrome.

    merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. getElementsByName
    Par stela86 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 11/05/2006, 15h16
  2. Probème vec getElementsByName
    Par richton95 dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 22/04/2006, 21h45
  3. getElementsByTagName ('*') 2balises dans la boucle test ?
    Par Lareine dans le forum Général JavaScript
    Réponses: 26
    Dernier message: 01/11/2005, 19h29
  4. [vbscript][DOM]pb avec getElementsByTagName...
    Par toyyo dans le forum APIs
    Réponses: 2
    Dernier message: 16/02/2005, 16h56
  5. getElementsByName ou getElementById
    Par lepierre dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 21/10/2004, 15h44

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