นี่คือภาพรวมของหลาย ๆ วิธีที่สามารถทำได้สำหรับการอ้างอิงของฉันเองและของคุณ :) ฟังก์ชันจะส่งคืนแฮชของชื่อแอตทริบิวต์และค่าของมัน
วานิลลา 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;
}, {} );
}
lodash
มีความกระชับมากกว่าเวอร์ชัน 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()