กำหนดองค์ประกอบ HTML โดยพลการพร้อมคุณสมบัติศูนย์หรือมากกว่าdata-*
นั้นเราจะเรียกรายการคู่คีย์ - ค่าสำหรับข้อมูลได้อย่างไร
เช่นได้รับสิ่งนี้:
<div id='prod' data-id='10' data-cat='toy' data-cid='42'>blah</div>
ฉันต้องการที่จะสามารถเรียกคืนนี้โดยทางโปรแกรม:
{ "id":10, "cat":"toy", "cid":42 }
การใช้ jQuery (v1.4.3) การเข้าถึงแต่ละบิตของข้อมูลที่ใช้$.data()
นั้นเป็นเรื่องง่ายหากรู้ล่วงหน้าคีย์ แต่ไม่ชัดเจนว่าจะใช้ข้อมูลชุดใดชุดหนึ่งได้
ฉันกำลังมองหาโซลูชัน jQuery ที่ 'ง่าย' ถ้ามีอยู่ แต่จะไม่คำนึงถึงวิธีการระดับล่าง ฉันพยายามแยกวิเคราะห์$('#prod').attributes
แต่การขาด javascript-fu ทำให้ฉันผิดหวัง
ปรับปรุง
customdataทำสิ่งที่ฉันต้องการ อย่างไรก็ตามการรวมปลั๊กอิน jQuery สำหรับฟังก์ชั่นการใช้งานบางส่วนนั้นดูเหมือนว่าเป็นการ overkill
การมองแหล่งที่มาช่วยให้ฉันแก้ไขรหัสของตัวเอง (และปรับปรุงจาวาสคริปต์ของฉัน)
นี่คือวิธีแก้ปัญหาที่ฉันได้รับ:
function getDataAttributes(node) {
var d = {},
re_dataAttr = /^data\-(.+)$/;
$.each(node.get(0).attributes, function(index, attr) {
if (re_dataAttr.test(attr.nodeName)) {
var key = attr.nodeName.match(re_dataAttr)[1];
d[key] = attr.nodeValue;
}
});
return d;
}
อัปเดต 2
ดังที่แสดงในคำตอบที่ได้รับการยอมรับการแก้ปัญหามีเพียงเล็กน้อยกับ jQuery (> = 1.4.4) $('#prod').data()
จะส่งคืนข้อมูล dict ที่ต้องการ