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 :

document.getElementsByClassName et IE7??


Sujet :

JavaScript

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    440
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 440
    Par défaut document.getElementsByClassName et IE7??
    Bonjour

    J'utilise getElementsByClassName qui fonctionne sans problèmes ni erreurs dans Firefox, Safari, Chrome mais pas dans * tan ta na na * Internet Explorer 7...

    Savez-vous pourquoi?

    Merci

  2. #2
    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 : 54
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Ce que je ne comprends surtout pas, c'est pourquoi ça fonctionne avec les autres navigateurs dans la mesure où cette méthode n'existe pas... à moins que tu aies oublié de préciser qu'il s'agit de la fonction de la lib Prototype dont il est spécifié qu'il faut éviter de l'utiliser car elle pose problème avec IE !
    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

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    440
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 440
    Par défaut
    Cette méthode n'existe pas??

    Pourtant je n'utilise pas Prototype.

    J'ai juste fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementsByClassName('classe')
    et ca a marché...

  4. #4
    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 : 54
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Ben... là je comprends pas trop... si tu essayes getElementsByClassName() sur FF, tu obtiens bien une erreur comme quoi ce n'est pas une fonction ! Tu es sûr qu'aucun script de ta page n'appelle Prototype ou une autre lib ?
    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

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    440
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 440
    Par défaut
    Non non j'ai tout fais moi même et je n'utilise rien d'autre...et en FF je n'ai aucune erreur

  6. #6
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    Par défaut
    bonjour,

    la fonction getElementsByClassName() est bien implémentée sous Firefox 3 : https://developer.mozilla.org/En/DOM...ntsByClassName

    Elle n'est pas implémentée sous IE.

    Exemple (qui fonctionne sous FF3) :
    Code html : 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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
     
    <head>
     
    <title></title>
     
     
    <meta http-equiv="Content-type" content="application/xhtml+xml; charset=ISO-8859-1" />
    <meta http-equiv="Content-Language" content="fr" />
     
     
    <style type="text/css">
    <!--
    .testClasse{
      color:#0000FF;
    }
    -->
    </style>
     
     
    <script type="text/javascript">
    <!--  
    function test()
    {
      alert(document.getElementsByClassName("testClasse").length);
    }
    //-->
    </script>
     
    </head>
     
    <body onload="test()">
     
    <div class="testClasse">coucou</div>
    <div class="testClasse">coucou</div>
    <div class="testClasse">coucou</div>
    <div>coucou</div>
     
    </body>
     
    </html>
    le alert() retourne 3 éléments.

  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 : 54
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    il va vraiment falloir que je passe à FF3 alors !!!
    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
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    Par défaut
    Citation Envoyé par Bovino Voir le message
    il va vraiment falloir que je passe à FF3 alors !!!


    Ca ne résoudra pas le problème pour IE 7

  9. #9
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (!document.getElementsByClassName){
      document.getElementsByClassName = function(){
        // une implémentation de la fonction
      }
    }
    comme ça si ton navigateur ne l'a pas, il l'a

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    440
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 440
    Par défaut
    Oh que je vais essayer ça car avec mon autre méthode j'ai des problèmes avec Safari. Je crois bien que cette façon me donnera le meilleur des deux mondes!

    Je vous tiens au courant!

    Addition: Ça fontionne! Merci!

  11. #11
    Membre éclairé
    Profil pro
    Dév FrontEnd
    Inscrit en
    Avril 2005
    Messages
    239
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Dév FrontEnd

    Informations forums :
    Inscription : Avril 2005
    Messages : 239
    Par défaut
    Quelle implémentation de la fonction as-tu choisie pour IE ?
    Merci.

  12. #12
    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
    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 !

  13. #13
    Membre actif
    Inscrit en
    Août 2008
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Août 2008
    Messages : 47
    Par défaut
    Citation Envoyé par bigboomshakala Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (!document.getElementsByClassName){
      document.getElementsByClassName = function(){
        // une implémentation de la fonction
      }
    }
    comme ça si ton navigateur ne l'a pas, il l'a
    Bosnoir,
    Je me permets de remonter le sujet car je viens de tomber sur le même problème et la solution est plutôt simple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    for (i=0; i<document.getElementsByTagName("*").length; i++)
    {  
      //tester le nom de la classe de cet objet
      if (document.getElementsByTagName("*").item(i).className == nom_class)
      {
         //on récupère l'objet dans la variable
         var mon_obj = document.getElementsByTagName("*").item(i); 
         ......
      }
    }

  14. #14
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Par défaut
    bonjour,

    ta solution est déjà limitée par le fait que l'élément cherché doit avoir exactement la classe css recherchée. si tu cherches "myClass1", un élément qui a "myClass1 myClass2" ne sera pas remonté...
    2è point, ta fonction n'est pas du tout optimisée (multiples document.getElementsByTagName à chaque itération...)

    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
    function getElementsByClassName(className, tag, elm){
    	var testClass = new RegExp("(^|\\s)" + className + "(\\s|$)");
    	var tag = tag || "*";
    	var elm = elm || document;
    	var elements = (tag == "*" && elm.all)? elm.all : elm.getElementsByTagName(tag);
    	var returnElements = [];
    	var current;
    	var length = elements.length;
    	for(var i=0; i<length; i++){
    		current = elements[i];
    		if(testClass.test(current.className)){
    			returnElements.push(current);
    		}
    	}
    	return returnElements;
    }

  15. #15
    Membre actif
    Inscrit en
    Août 2008
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Août 2008
    Messages : 47
    Par défaut
    Citation Envoyé par bigboomshakala Voir le message
    bonjour,
    ... ta solution est déjà limitée par le fait que l'élément cherché doit avoir exactement la classe css recherchée ...
    Bonsoir,
    C'est ce qui fait getElementsByClassName, non!.

    Citation Envoyé par bigboomshakala Voir le message
    2è point, ta fonction n'est pas du tout optimisée (multiples document.getElementsByTagName à chaque itération...)
    Est ce que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    for (i=0; i<document.getElementsByTagName("*").length; i++)
    {  
      var X_obj = document.getElementsByTagName("*").item(i); 
      if (X_obj.className == nom_class)
      {
         var mon_obj = X_obj; 
      }
    }
    est plus optimisée?

    Cordialement.

  16. #16
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    Par défaut
    bonjour,

    Citation Envoyé par Mohamed_DEV Voir le message
    Est ce que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    for (i=0; i<document.getElementsByTagName("*").length; i++)
    {  
      var X_obj = document.getElementsByTagName("*").item(i); 
      if (X_obj.className == nom_class)
      {
         var mon_obj = X_obj; 
      }
    }
    est plus optimisée?
    en ce qui me concerne j'évite les déclarations de variables dans le code et encore plus dans les boucles :


    Code javascript : 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
     
    var n, i, X_obj, mon_obj;
    var tabObj;
    var nom_class = "maClasse";
     
    tabObj = document.getElementsByTagName("*");
    n = tabObj.length;
     
    for (i=0; i<n; i++)
    {  
      X_obj = tabObj.item(i); 
      if (X_obj.className == nom_class)
      {
        mon_obj = X_obj; 
      }
    }

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

Discussions similaires

  1. document.getElementsByClassName qui ne fonctionne pas
    Par dragonno dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 14/06/2011, 02h12
  2. WebBrowser1 Document getElementsByClassName
    Par bailamos dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 03/06/2010, 15h09
  3. Window.open de document pdf et IE7/8
    Par gamerome dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 28/04/2010, 16h03
  4. [POO] Document.open dans IE7 ne marche plus ?
    Par jgfa9 dans le forum Général JavaScript
    Réponses: 17
    Dernier message: 30/10/2008, 22h58
  5. document.getElementById et IE7
    Par robinou dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 10/07/2007, 17h16

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