다음은 내 자신의 참조뿐만 아니라 수행 할 수있는 많은 방법에 대한 개요입니다. :) 함수는 속성 이름과 값의 해시를 반환합니다.
바닐라 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가 포함 된 바닐라 JS
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;
}, {} );
}
대쉬
Underscore 버전보다 훨씬 간결하지만 Underscore가 아닌 lodash에서만 작동합니다. IE9 +가 필요하며 IE8에서는 버그가 있습니다. 그 중 하나 를 @AlJey 에게 전합니다 .
function getAttributes ( node ) {
return _.transform( node.attributes, function ( attrs, attribute ) {
attrs[attribute.name] = attribute.value;
}, {} );
}
테스트 페이지
JS Bin에는 이러한 모든 기능을 다루는 라이브 테스트 페이지가 있습니다. 테스트에는 부울 속성 ( hidden
) 및 열거 속성 ( contenteditable=""
)이 포함됩니다.
$().attr()