143 votes

Obtenir tous les attributs d'un élément à l'aide de jQuery

Je suis en train de passer par l'intermédiaire d'un élément et obtenir tous les attributs de l'élément de sortie, par exemple, une balise peut avoir 3 ou plusieurs attributs, inconnu pour moi et j'ai besoin d'obtenir les noms et les valeurs de ces attributs. Je pensais à quelque chose le long des lignes de:

$(this).attr().each(function(index, element) {
    var name = $(this).name;
    var value = $(this).value;
    //Do something with name and value...
});

Quelqu'un pourrait-il me dire si cela est encore possible, et si oui, quelle était la bonne syntaxe?

273voto

pimvdb Points 66332

L' attributes propriété contient tous les:

$(this).each(function() {
  $.each(this.attributes, function() {
    // this.attributes is not a plain object, but an array
    // of attribute nodes, which contain both the name and value
    if(this.specified) {
      console.log(this.name, this.value);
    }
  });
});

Ce que vous pouvez également faire est d'étendre .attr , de sorte que vous pouvez l'appeler comme .attr() pour obtenir un objet ordinaire de tous les attributs:

(function(old) {
  $.fn.attr = function() {
    if(arguments.length === 0) {
      if(this.length === 0) {
        return null;
      }

      var obj = {};
      $.each(this[0].attributes, function() {
        if(this.specified) {
          obj[this.name] = this.value;
        }
      });
      return obj;
    }

    return old.apply(this, arguments);
  };
})($.fn.attr);

Utilisation:

var $div = $("<div data-a='1' id='b'>");
$div.attr();  // { "data-a": "1", "id": "b" }

3voto

Al Jey Points 380

avec LoDash vous pourriez simplement faire ceci:

_.transform(this.attributes, function (result, item) {
  item.specified && (result[item.name] = item.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