50 votes

Itérer sur les attributs d'élément avec jQuery

Je sais que les attributs peuvent être extraites à l' attr() méthode, mais je suis en train de répéter sur tous les attributs d'un élément. Pour le contexte, je suis en utilisant jQuery sur du XML...

<items>
  <item id="id123" name="Fizz" value="Buzz" type="xyz">
    <subitem name="foo">
    <subitem name="bar">
  </item>
  <item id="id456" name="Bizz" value="Bazz" type="abc">
    <subitem name="meh">
    <subitem name="hem">
  </item>
</items>

Je suis déjà capable d'itérer sur les éléments avec...

$(xml).find('item').each(function() {
  // Do something to each item here...
});

Mais j'aimerais être en mesure d'obtenir un tableau d'attributs pour chaque "item" donc, je peux alors itération sur ces...

par exemple

$(xml).find('item').each(function() {
  var attributes = $(this).attributes(); // returns an array of attributes?
  for (attribute in attributes) {
    // Do something with each attribute...
  }
});

J'ai fait quelques recherches ici, dans le jQuery documentation, et d'ailleurs via Google, mais n'ont eu aucune chance. Si rien d'autre, je peut juste avoir de la difficulté à l'exclusion des résultats relatifs à l' attr() méthode de l'objet jQuery. Merci à l'avance.

108voto

prodigitalson Points 38549

Le meilleur moyen consiste à utiliser l'objet nœud directement à l'aide de sa propriété attributes . La seule différence dans ma solution ci-dessous par rapport à d'autres suggérant cette méthode est que j'utiliserais à nouveau .each au lieu d'une boucle js traditionnelle:

 $(xml).find('item').each(function() {
  $.each(this.attributes, function(i, attrib){
     var name = attrib.name;
     var value = attrib.value;
     // do your magic :-)
  });
});
 

12voto

Juraj Blahunka Points 5620

il semble que vous deviez utiliser du javascript simple et ancien:

 for (var i = 0; i < elem.attributes.length; i++) {
    var attrib = elem.attributes[i];
    if (attrib.specified == true) {
        console.log(attrib.name + " = " + attrib.value);
    }
}
 

http://stackoverflow.com/questions/828311/how-to-iterate-through-all-attributes-in-an-html-element

4voto

womp Points 71924

Pourriez-vous obtenir l'élément DOM de l'encapsuleur jQuery à l'aide de la fonction get (), puis itérer les attributs du DOM?

 var node = $(myStuff).get(0);
if (node.attributes.length) {

    for (var length = attrs.length, i = 0; i < length; i++) {
        if (attrs[i].specified) {

        }
    }
}
 

Pour une gestion des attributs DOM beaucoup plus robuste, consultez cet article de blog .

1voto

Naeem Sarfraz Points 2907

Que diriez-vous?

 $(xml).find('item').each(function() {
  var attributes = $(this)[0].attributes;
  for (attribute in attributes) {
    // Do something with each attribute...
  }
});
 

1voto

Doug Neiner Points 34940

Bien que vous puissiez simplement utiliser l'attribut d'élément DOM standard attributes , il inclura tous les attributs (même ceux qui ne sont pas explicitement définis) dans IE6. Alternativement, vous pouvez limiter le nombre d'attributs que vous définissez:

 var use_attributes = ['id','name','value','type'];
$(xml).find('item').each(function() {
  var $item = $(this);

  $.each( use_attributes, function(){
    if($item.attr( this )){
      // Act on the attribute here. 
      // `this` = attribute name
      // $item.attr( this ) = attribute value
    }
  })
});
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X