Voici un aperçu des nombreuses façons qui peuvent être faites, pour ma propre référence ainsi que la vôtre :) Les fonctions renvoient un hachage des noms d'attributs et de leurs valeurs.
Vanille JS :
function getAttributes ( node ) {
var i,
attributeNodes = node.attributes,
length = attributeNodes.length,
attrs = {};
for ( i = 0; i < length; i++ ) attrs[attributeNodes[i].name] = attributeNodes[i].value;
return attrs;
}
Vanilla JS avec Array.reduce
Fonctionne pour les navigateurs prenant en charge ES 5.1 (2011). Nécessite IE9 +, ne fonctionne pas dans IE8.
function getAttributes ( node ) {
var attributeNodeArray = Array.prototype.slice.call( node.attributes );
return attributeNodeArray.reduce( function ( attrs, attribute ) {
attrs[attribute.name] = attribute.value;
return attrs;
}, {} );
}
jQuery
Cette fonction attend un objet jQuery, pas un élément DOM.
function getAttributes ( $node ) {
var attrs = {};
$.each( $node[0].attributes, function ( index, attribute ) {
attrs[attribute.name] = attribute.value;
} );
return attrs;
}
Souligner
Fonctionne également pour le lodash.
function getAttributes ( node ) {
return _.reduce( node.attributes, function ( attrs, attribute ) {
attrs[attribute.name] = attribute.value;
return attrs;
}, {} );
}
lodash
Est encore plus concis que la version Underscore, mais ne fonctionne que pour lodash, pas pour Underscore. Nécessite IE9 +, est bogué dans IE8. Félicitations à @AlJey pour celui-là .
function getAttributes ( node ) {
return _.transform( node.attributes, function ( attrs, attribute ) {
attrs[attribute.name] = attribute.value;
}, {} );
}
Page de test
Chez JS Bin, il existe une page de test en direct couvrant toutes ces fonctions. Le test comprend des attributs booléens ( hidden
) et des attributs énumérés ( contenteditable=""
).
$().attr()