これは、私自身とあなたの参照のために、実行できる多くの方法の概要です:)関数は、属性名とその値のハッシュを返します。
バニラ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;
}
Array.reduceを使用したVanillaJS
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
この関数は、DOM要素ではなくjQueryオブジェクトを想定しています。
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
アンダースコアバージョンよりもさらに簡潔ですが、アンダースコアではなく、lodashでのみ機能します。IE9 +が必要ですが、IE8ではバグがあります。@AlJeyに感謝します。
function getAttributes ( node ) {
return _.transform( node.attributes, function ( attrs, attribute ) {
attrs[attribute.name] = attribute.value;
}, {} );
}
テストページ
JS Binには、これらすべての機能をカバーするライブテストページがあります。テストには、ブール属性(hidden
)と列挙型属性()が含まれますcontenteditable=""
。