มีการกล่าวถึงใน.data()
เอกสารประกอบ
data- แอตทริบิวต์ถูกดึงในครั้งแรกที่มีการเข้าถึงคุณสมบัติข้อมูลจากนั้นจะไม่มีการเข้าถึงหรือกลายพันธุ์อีกต่อไป (จากนั้นค่าข้อมูลทั้งหมดจะถูกเก็บไว้ภายในใน jQuery)
นอกจากนี้ยังครอบคลุมถึงทำไมไม่เปลี่ยนเป็น jQuery $ .fn.data () อัปเดตแอตทริบิวต์ข้อมูล html 5 ที่สอดคล้องกัน
การสาธิตคำตอบเดิมของฉันด้านล่างดูเหมือนจะไม่ได้ผลอีกต่อไป
คำตอบที่อัปเดต
อีกครั้งจาก.data()
เอกสาร
การรักษาแอตทริบิวต์ที่มีเครื่องหมายขีดกลางถูกเปลี่ยนใน jQuery 1.6 เพื่อให้สอดคล้องกับข้อกำหนด W3C HTML5
ดังนั้น<div data-role="page"></div>
ต่อไปนี้เป็นความจริง$('div').data('role') === 'page'
ฉันค่อนข้างแน่ใจว่ามันใช้$('div').data('data-role')
งานได้ในอดีต แต่ดูเหมือนจะไม่เป็นเช่นนั้นอีกต่อไป ฉันได้สร้างการแสดงที่ดีขึ้นซึ่งบันทึกเป็น HTML แทนที่จะต้องเปิดคอนโซลและเพิ่มตัวอย่างเพิ่มเติมของการแปลงขีดกลางหลายตัวให้กับ camelCase data- attributes
อัปเดตการสาธิต (2015-07-25)
ดูjQuery Data vs Attr ด้วย?
HTML
<div id="changeMe" data-key="luke" data-another-key="vader"></div>
<a href="#" id="changeData"></a>
<table id="log">
<tr><th>Setter</th><th>Getter</th><th>Result of calling getter</th><th>Notes</th></tr>
</table>
จาวาสคริปต์ (jQuery 1.6.2+)
var $changeMe = $('#changeMe');
var $log = $('#log');
var logger;
(logger = function(setter, getter, note) {
note = note || '';
eval('$changeMe' + setter);
var result = eval('$changeMe' + getter);
$log.append('<tr><td><code>' + setter + '</code></td><td><code>' + getter + '</code></td><td>' + result + '</td><td>' + note + '</td></tr>');
})('', ".data('key')", "Initial value");
$('#changeData').click(function() {
logger(".data('key', 'leia')", ".data('key')", "expect leia on jQuery node object but DOM stays as luke");
logger(".attr('data-key', 'yoda')", ".data('key')", "expect leia (still) on jQuery object but DOM now yoda");
logger("", ".attr('key')", "expect undefined (no attr <code>key</code>)");
logger("", ".attr('data-key')", "expect yoda in DOM and on jQuery object");
logger('', ".data('data-key')", "expect undefined (cannot get via this method)");
logger(".data('anotherKey')", ".data('anotherKey')", "jQuery 1.6+ get multi hyphen <code>data-another-key</code>");
logger(".data('another-key')", ".data('another-key')", "jQuery < 1.6 get multi hyphen <code>data-another-key</code> (also supported in jQuery 1.6+)");
return false;
});
$('#changeData').click();
การสาธิตที่เก่ากว่า
คำตอบเดิม
สำหรับ HTML นี้:
<div id="foo" data-helptext="bar"></div>
<a href="#" id="changeData">change data value</a>
และ JavaScript นี้ (ด้วย jQuery 1.6.2)
console.log($('#foo').data('helptext'));
$('#changeData').click(function() {
$('#foo').data('helptext', 'Testing 123');
console.log($('#foo').data('data-helptext'));
return false;
});
ดูการสาธิต
การใช้คอนโซลChrome DevTools เพื่อตรวจสอบ DOM จะไม่อัปเดตค่าตามที่เห็นในคอนโซลแต่ทำ$('#foo').data('helptext', 'Testing 123');
$('#foo').attr('data-helptext', 'Testing 123');