Burada benim ve sizin referansım için yapılabilecek birçok yönteme genel bir bakış var :) İşlevler, öznitelik adlarının ve değerlerinin bir karmasını döndürür.
Vanilya 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 ile Vanilla JS
ES 5.1 (2011) destekleyen tarayıcılar için çalışır. IE9 + gerektirir, IE8'de çalışmaz.
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
Bu işlev bir DOM öğesi değil, bir jQuery nesnesi bekler.
function getAttributes ( $node ) {
var attrs = {};
$.each( $node[0].attributes, function ( index, attribute ) {
attrs[attribute.name] = attribute.value;
} );
return attrs;
}
Vurgulamak
Lodash için de çalışıyor.
function getAttributes ( node ) {
return _.reduce( node.attributes, function ( attrs, attribute ) {
attrs[attribute.name] = attribute.value;
return attrs;
}, {} );
}
lodash
Underscore sürümünden bile daha özlüdür, ancak Underscore için değil, yalnızca lodash için çalışır. IE9 + gerektirir, IE8'de hatalı. @AlJey Şeref o biri için .
function getAttributes ( node ) {
return _.transform( node.attributes, function ( attrs, attribute ) {
attrs[attribute.name] = attribute.value;
}, {} );
}
Test sayfası
JS Bin'de, tüm bu işlevleri kapsayan canlı bir test sayfası var . Test, boole özniteliklerini ( hidden
) ve numaralandırılmış öznitelikleri ( contenteditable=""
) içerir.
$().attr()