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

jQuery Discussion :

Récupérer tous les attributs dans un tableau


Sujet :

jQuery

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2020
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2020
    Messages : 54
    Par défaut Récupérer tous les attributs dans un tableau
    Bonjour à tous
    Je viens demander votre aide.
    J'ai un ensemble d'éléments ayant en commun la classe "target", j'essai de récupérer tous les attributs ainsi que les valeurs correspondantes dans un tableau.
    J'utilise le code ci dessous, j'ai bien le résultat souhaité pour chaque élément lorsque je fais console log dans la boucle, mais le résultat finale me donne un tableau vide.

    Ci dessous le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    let
    				obj = {},
     
    				$.map($('.target'), function(elem){
     
    					for (var att, i = 0, atts = elem.attributes, n = atts.length; i < n; i++){
    						att = atts[i];
    						obj[att.nodeName] = att.nodeValue;
    					}
     
    				});
    Merci d'avance pour votre aide.

    Cordialement

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 702
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 702
    Par défaut
    montrez nous le code entier avec le code de débugage et le résultat qui s'affiche.

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2020
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2020
    Messages : 54
    Par défaut
    Bonjour Mathieu, ci dessous les codes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function showattr() {
    	let
    		obj = {};
     		$.map($('.target'), function(elem){
    			for (var att, i = 0, atts = elem.attributes, n = atts.length; i < n; i++){
    				att = atts[i];
    				obj[att.nodeName] = att.nodeValue;
    			}
    		});
    	console.log(obj);
    };
    Ci-dessous un exemple d'élément sur lequel j'aimerai récupérer par exemple les attribut : data-divid, data-type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <h6 class="targetix" id="btn_03683e4d31e40faebf23_3" data-type="typeo" data-divid="03683e4d31e40faebf23">test</h6>
    Ci dessous le résultat de la console :
    Nom : ide.png
Affichages : 144
Taille : 1,9 Ko

    Merci pour votre aide

    Cordialement

  4. #4
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 702
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 702
    Par défaut
    en mettant $('.targetix') dans votre code, j'obtiens bien la liste des attributs dans le tableau "obj".

    https://codesandbox.io/s/elated-haibt-c68bn

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2020
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2020
    Messages : 54
    Par défaut
    [Merci pour ton aide. J'ai regardé, comme ça marche mais j'ai plusieurs éléments et lorsque je duplique l'élément (pour en avoir 2 ou plus) uniquement les attributs du dernier élément sont récupéré. Alors que je m'attend a avoir un tableau avec les attribut de chaque élément.

    Merci de ton aide

  6. #6
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 702
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 702
    Par défaut
    c'est parce que vous utilisez un tableau avec le nom des attributs comme clé.
    pour le 1er élément, la valeur de l'attribut est enregistré sous la clé "data-type" par exemple. mais ensuite quand la boucle parcours le 2e élément, la nouvelle valeur écrase la valeur du 1er élément.

    avant de faire le code, il faut d'abord que vous choisissez quelle structure de données vous voulez pour stocker le résultat de la lecteur des attributs.

  7. #7
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2020
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2020
    Messages : 54
    Par défaut
    Je comprend. Merci pour cette precision. Cependant pourriez vous m'aider a corriger mon code afin de pouvoir recuperer les attributs de tous les elements s'il vous plait?
    Merci pour l'aide

    Cordialement

  8. #8
    Inactif  
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2021
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juin 2021
    Messages : 645
    Par défaut
    Bonjour,

    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function showattr() {
      var obj = {};
      $.map( $('.targetix'), function(elem, x=0){
        obj[x] = {};
        let atts = elem.attributes, 
            n = atts.length;
        for (let i=0; i<n; i++)
        {
          obj[x][atts[i].nodeName] = atts[i].nodeValue;
        }
        x++;
      });
      return obj;
    };
    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var target_attr_obj = showattr();
    console.log( target_attr_obj );  // test

  9. #9
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2020
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2020
    Messages : 54
    Par défaut
    Bonjour
    C'est parfait! Ca marche comme je souhaite.

    Grand merci à vous pour votre aide

    Cordialement

  10. #10
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 227
    Par défaut
    Bonjour,
    je me permet de faire quelque remarques sur le code posté par jreaux62.

    Concernant : var obj = {}; :
    L'utilisation d'un objet possédant des clés numériques, outre le fait que celles-ci soient prises en compte comme des strings, fait que l'on se prive de toutes les méthodes liées aux array et notamment forEach souvent de bon aloi.
    Dans ce cas on obtient, par exemple quelque chose comme :
    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
    type_object : {
      "0": {
        "id": "id_1",
        "data-type": "texte",
        "data-divid": "0001"
      },
      "1": {
        "id": "id_2",
        "data-type": "texte",
        "data-divid": "0002"
      },
      "2": {
        "id": "id_3",
        "data-type": "texte",
        "data-divid": "0003"
      },
      "3": {
        "id": "id_4",
        "data-type": "texte",
        "data-divid": "0004"
      }
    }
    ... plutôt que :
    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
    type_array : [
      {
        "id": "id_1",
        "data-type": "texte",
        "data-divid": "0001"
      },
      {
        "id": "id_2",
        "data-type": "texte",
        "data-divid": "0002"
      },
      {
        "id": "id_3",
        "data-type": "texte",
        "data-divid": "0003"
      },
      {
        "id": "id_4",
        "data-type": "texte",
        "data-divid": "0004"
      }
    ]
    peut être plus lisible et facilement exploitable.

    Concernant : obj[x][atts[i].nodeName] = atts[i].nodeValue; :

    nodeName et nodeValue sont des propriétés dépréciées et a remplacer par name et value.

    Voir pour infos :


    Concernant : x++; :
    L'incrémentation, tout comme l’initialisation, ne sert à rien, x est incrémenté par la fonction mise en callback.

    Voir pour infos :


    Concernant : la boucle

    De nos jours il existe une instruction plus consiste comme for...of, le code s'en trouve allégé et plus lisible, bien que cela soit un point de vue très personnel.

    Au final la fonction pourrait ressembler, par exemple, à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function showattr(selecteur) {
      const arr = [];
      $.map($(selecteur), function(elem) {
        const obj = {};
        for (let attr of elem.attributes) {
          obj[attr.name] = attr.value;
        }
        arr.push(obj);
      });
      return arr;
    };
    const result = showattr(".targetix");
    console.log("result :", JSON.stringify(result, null, 2));

  11. #11
    Inactif  
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2021
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juin 2021
    Messages : 645
    Par défaut
    @NoSmoking

    Je plussois à toutes tes remarques

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

Discussions similaires

  1. Récupérer tous les attributs "id" d'une chaine
    Par Gedan dans le forum jQuery
    Réponses: 4
    Dernier message: 23/08/2011, 16h15
  2. récupérer tous les attributs d'un formulaire javascript
    Par popol76 dans le forum Microsoft Dynamics CRM
    Réponses: 2
    Dernier message: 03/06/2010, 16h33
  3. Réponses: 2
    Dernier message: 06/04/2007, 17h35
  4. [JDOM] Récupérer tous les attributs d'un élément
    Par ammah dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 21/06/2006, 18h05
  5. Réponses: 7
    Dernier message: 08/01/2005, 14h24

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