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 :

DOM : node et attributes


Sujet :

JavaScript

  1. #1
    r83
    r83 est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 271
    Par défaut DOM : node et attributes
    Bonsoir,

    Je n'arrive pas à afficher les attributs d'un noeud. Soit il me les affiche tous et il y en a 136, soit aucun.
    Voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    function fMesAttributs()
    {
    	var  lesAttributs= document.getElementById("btnAttributs").attributes;
    	var message= "Les " + lesAttributs.length + " attributs du bouton sont : \n";
    	for(var i=0;i<lesAttributs.length;i++)
    	{
    		if(lesAttributs[i].Value != null)
    		message+=lesAttributs[i].name  +"   " +lesAttributs[i].value + "\n"; 
    	}
    	alert(message );
    }
    Je ne pense pas que ce soit une erreur algorithmique...
    Je voudrais affiche uniquement ceux qui ne sont pas à null.
    Merci pour les réponses

  2. #2
    Membre émérite Avatar de sebhm
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2004
    Messages
    1 090
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 090
    Par défaut
    Bonjour,

    j'aurais fait comme toi au départ...

    mais sinon, ceci marche chez moi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
      function fMesAttributs()
      {
      	var  lesAttributs= document.getElementById("textfield").attributes;
      	var message= "Les " + lesAttributs.length + " attributs du bouton sont : \n";
      	for(var i=0;i<lesAttributs.length;i++)
      	{
          att=lesAttributs.getNamedItem(lesAttributs[i].name);
          message+=lesAttributs[i].name+' = '+att.value + "\n";
      	}
      	alert(message );
      }

  3. #3
    r83
    r83 est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 271
    Par défaut
    Bonjour,

    Merci pour ta réponse, ton code fonctionne sous mozilla. par contre sous IE, tous les attributs sont renvoyés.
    Quelle autre solution pourrait convenir sous OE, je n'ai plus d'idées.
    Bonne journée

  4. #4
    Membre émérite Avatar de sebhm
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2004
    Messages
    1 090
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 090
    Par défaut
    ah oui !

    ben on peut toujours réduire la liste avec des tests du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (att.value != "null" && att.value != "")
    mais c'est vrai qu'on devrait pouvoir récupérer les attributs mis dans le code ... je ne sais pas le faire

  5. #5
    Membre émérite Avatar de sebhm
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2004
    Messages
    1 090
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 090
    Par défaut
    un peu d'aide là pour le cross browser
    apparemment pas simple pour les attributs...
    mieux vaut savoir lequel on veut

  6. #6
    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
    Salut,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(lesAttributs[i].Value != null)
    JavaScript étant sensible à la casse, un attribut n'a pas de propriété Value
    Ensuite, puisque tu accèdes à l'attribut, c'est qu'il existe, il ne peut donc pas être null !
    Donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(lesAttributs[i].value)
    vérifiera si la valeur de l'attribut est équivalent à false (en particulier, si c'est une chaine vide).
    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

  7. #7
    r83
    r83 est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 271
    Par défaut
    Désolé, mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(lesAttributs[i].value)
    ne change rien, IE n'admet toujours pas et renvoie TOUS les attributs. Résultat OK sur Mozilla.
    Bonne journée
    BR

  8. #8
    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
    IE préfèrera peut-être nodeValue à value
    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

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Février 2009
    Messages : 354
    Par défaut
    quand on passe par la variable attributes, de l'élément, toutes les valeur retourné sont des string, du coup les tests du genre !=false ect fonctionnent pas

    Avec ie, touts les attributs sont accessibles comme propriété du nœud, donc le test va se faire par le nœud
    de plus ie renvoie l'objet style, donc on l'enlevé aussi

    voilà une fonction toute prète

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    <html>
     
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
    <title>getAttributes</title>
    <script type='text/javascript'>
     
     var isIE = /msie/.test(navigator.userAgent.toLowerCase());//globale car tres utile (d ailleur detection super sipmliste)
     
     function getAttributes(el){
         var a = el.attributes, 
             l = a.length,
             r= {}, 
             i = 0, 
             n;
     
         for(; i < l; i++){
             n = a[i].name;
             if(!isIE){
                 r[n] = a[i].value;
             }else if(n != 'style' && el[n]){alert(n+'+'+el[n]);
                 r[n] = el[n];
             }
         }
         return  r;
     }
     
      </script>
    </head>
     
    <body>
    <div id="test" border=0>test</div>
    <script type='text/javascript'>
     
       alert(getAttributes(document.getElementById('test')).id);
    </script>
    </html>
    reste encore un attribut, c'est contentEditable avec comme valeur par défaut inherit, a toi de voire ce que tu veux en faire

    bye

Discussions similaires

  1. [DOM] Récupérer les attributs d'une classe CSS ?
    Par titoumimi dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 10/07/2007, 14h33
  2. [DOM]Modifier un attribut
    Par Shandler dans le forum APIs
    Réponses: 14
    Dernier message: 27/06/2007, 21h04
  3. [SimpleXML] [DOM] Ajouter un attribut
    Par Klimium dans le forum Bibliothèques et frameworks
    Réponses: 45
    Dernier message: 14/12/2006, 12h56
  4. [DOM][nodes]Petit problème de syntaxe..
    Par GDVL dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 28/09/2005, 12h24
  5. copy de nodes mais attribut en trop
    Par Triangle dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 15/06/2005, 18h30

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