Ecco una panoramica dei molti modi in cui è possibile eseguire, sia per il mio riferimento che per il tuo :) Le funzioni restituiscono un hash di nomi di attributi e dei loro valori.
Vanilla 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 con Array.reduce
Funziona con browser che supportano ES 5.1 (2011). Richiede IE9 +, non funziona in 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
Questa funzione prevede un oggetto jQuery, non un elemento DOM.
function getAttributes ( $node ) {
var attrs = {};
$.each( $node[0].attributes, function ( index, attribute ) {
attrs[attribute.name] = attribute.value;
} );
return attrs;
}
Sottolineare
Funziona anche per lodash.
function getAttributes ( node ) {
return _.reduce( node.attributes, function ( attrs, attribute ) {
attrs[attribute.name] = attribute.value;
return attrs;
}, {} );
}
lodash
È ancora più conciso della versione di Underscore, ma funziona solo per lodash, non per Underscore. Richiede IE9 +, è difettoso in IE8. Complimenti a @AlJey per quello .
function getAttributes ( node ) {
return _.transform( node.attributes, function ( attrs, attribute ) {
attrs[attribute.name] = attribute.value;
}, {} );
}
Pagina di prova
Su JS Bin, c'è una pagina di test live che copre tutte queste funzioni. Il test include attributi booleani ( hidden
) e attributi enumerati ( contenteditable=""
).
$().attr()