Berikut ini adalah ikhtisar dari banyak cara yang dapat dilakukan, untuk referensi saya sendiri dan juga milik Anda :) Fungsi mengembalikan hash nama atribut dan nilainya.
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 dengan Array.reduce
Berfungsi untuk browser yang mendukung ES 5.1 (2011). Membutuhkan IE9 +, tidak berfungsi di 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
Fungsi ini mengharapkan objek jQuery, bukan elemen DOM.
function getAttributes ( $node ) {
var attrs = {};
$.each( $node[0].attributes, function ( index, attribute ) {
attrs[attribute.name] = attribute.value;
} );
return attrs;
}
Menggarisbawahi
Juga berfungsi untuk lodash.
function getAttributes ( node ) {
return _.reduce( node.attributes, function ( attrs, attribute ) {
attrs[attribute.name] = attribute.value;
return attrs;
}, {} );
}
Lodash
Bahkan lebih ringkas daripada versi Underscore, tetapi hanya berfungsi untuk lodash, bukan untuk Underscore. Membutuhkan IE9 +, bermasalah di IE8. Kudos to @AlJey untuk yang itu .
function getAttributes ( node ) {
return _.transform( node.attributes, function ( attrs, attribute ) {
attrs[attribute.name] = attribute.value;
}, {} );
}
Halaman uji
Di JS Bin, ada halaman pengujian langsung yang mencakup semua fungsi ini. Tes ini mencakup atribut boolean ( hidden
) dan atribut yang disebutkan ( contenteditable=""
).
$().attr()