Dưới đây là tổng quan về nhiều cách có thể được thực hiện, để tham khảo cho riêng tôi cũng như của bạn :) Các hàm trả về một hàm băm của tên thuộc tính và giá trị của chúng.
Vanilla 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 với Array.reduce
Hoạt động cho các trình duyệt hỗ trợ ES 5.1 (2011). Yêu cầu IE9 +, không hoạt động trong 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
Hàm này mong đợi một đối tượng jQuery, không phải là một phần tử DOM.
function getAttributes ( $node ) {
var attrs = {};
$.each( $node[0].attributes, function ( index, attribute ) {
attrs[attribute.name] = attribute.value;
} );
return attrs;
}
Gạch dưới
Cũng hoạt động cho lodash.
function getAttributes ( node ) {
return _.reduce( node.attributes, function ( attrs, attribute ) {
attrs[attribute.name] = attribute.value;
return attrs;
}, {} );
}
nhà nghỉ
Thậm chí ngắn gọn hơn phiên bản Underscore, nhưng chỉ hoạt động cho lodash, không phải cho Underscore. Yêu cầu IE9 +, là lỗi trong IE8. Kudos gửi @AlJey cho cái đó .
function getAttributes ( node ) {
return _.transform( node.attributes, function ( attrs, attribute ) {
attrs[attribute.name] = attribute.value;
}, {} );
}
Trang thử nghiệm
Tại JS Bin, có một trang thử nghiệm trực tiếp bao gồm tất cả các chức năng này. Kiểm tra bao gồm các thuộc tính boolean ( hidden
) và thuộc tính liệt kê ( contenteditable=""
).
$().attr()