Вот обзор множества способов, которые можно сделать, как для моей, так и для вашей справки :) Функции возвращают хэш имен атрибутов и их значений.
Ванильный 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;
}
Ванильный JS с Array.reduce
Работает для браузеров, поддерживающих ES 5.1 (2011). Требуется IE9 +, в 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
Эта функция ожидает объект jQuery, а не элемент DOM.
function getAttributes ( $node ) {
var attrs = {};
$.each( $node[0].attributes, function ( index, attribute ) {
attrs[attribute.name] = attribute.value;
} );
return attrs;
}
Нижнее подчеркивание
Также работает для lodash.
function getAttributes ( node ) {
return _.reduce( node.attributes, function ( attrs, attribute ) {
attrs[attribute.name] = attribute.value;
return attrs;
}, {} );
}
lodash
Это даже более лаконично, чем версия Underscore, но работает только для lodash, а не для Underscore. Требуется IE9 +, в IE8 глючит. Престижность @AlJey за это .
function getAttributes ( node ) {
return _.transform( node.attributes, function ( attrs, attribute ) {
attrs[attribute.name] = attribute.value;
}, {} );
}
Тестовая страница
В JS Bin есть живая тестовая страница, охватывающая все эти функции. Тест включает логические атрибуты ( hidden
) и перечислимые атрибуты ( contenteditable=""
).
$().attr()