Ось огляд багатьох способів, які можна зробити, для моєї власної довідки, а також для вас :) Функції повертають хеш імен атрибутів та їх значень.
Ванільний 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 з 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;
}, {} );
}
лодаш
Це навіть більш стисло, ніж версія підкреслення, але працює лише для лодашу, а не для підкреслення. Потрібен IE9 +, є помилкою в IE8. Кудо для @AlJey для цього .
function getAttributes ( node ) {
return _.transform( node.attributes, function ( attrs, attribute ) {
attrs[attribute.name] = attribute.value;
}, {} );
}
Тестова сторінка
У JS Bin є тестова сторінка, яка охоплює всі ці функції. Тест включає булеві атрибути ( hidden
) та перелічені атрибути ( contenteditable=""
).
$().attr()