यह प्रलेखन में उल्लिखित है.data()
डेटा-गुण पहली बार डेटा प्रॉपर्टी के एक्सेस होने पर खींचे जाते हैं और फिर एक्सेस नहीं किए जाते हैं या म्यूट किए जाते हैं (सभी डेटा मान तब jQuery में आंतरिक रूप से संग्रहीत होते हैं)
यह भी कवर किया गया था कि jQuery $ .fn.data () से संबंधित HTML 5 डेटा- * विशेषताओं को अपडेट क्यों नहीं किया जाता है?
नीचे मेरे मूल जवाब पर डेमो किसी भी अधिक काम नहीं कर रहा है।
अद्यतन उत्तर
फिर, .data()
प्रलेखन से
W3C HTML5 विनिर्देश के अनुरूप एम्बेडेड डैश के साथ विशेषताओं के उपचार को jQuery 1.6 में बदल दिया गया था।
तो <div data-role="page"></div>
निम्नलिखित के लिए सच है$('div').data('role') === 'page'
मुझे पूरा यकीन है कि $('div').data('data-role')
अतीत में काम किया है, लेकिन ऐसा नहीं लगता कि मामला किसी भी अधिक है। मैंने एक बेहतर शोकेस बनाया है जो कंसोल को खोलने के बजाय HTML में लॉग करता है और डेटा-एट्रिब्यूट रूपांतरण के लिए मल्टी-हाइफ़न का एक अतिरिक्त उदाहरण जोड़ दिया है।
अपडेटेड डेमो (2015-07-25)
इसके अलावा jQuery डेटा बनाम Attr देखें?
एचटीएमएल
<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() {
// set data-key to new value
logger(".data('key', 'leia')", ".data('key')", "expect leia on jQuery node object but DOM stays as luke");
// try and set data-key via .attr and get via some methods
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");
// bonus points
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>
और यह जावास्क्रिप्ट (jQuery 1.6.2 के साथ)
console.log($('#foo').data('helptext'));
$('#changeData').click(function() {
$('#foo').data('helptext', 'Testing 123');
// $('#foo').attr('data-helptext', 'Testing 123');
console.log($('#foo').data('data-helptext'));
return false;
});
डेमो देखें
का उपयोग करना Chrome DevTools कंसोल डोम का निरीक्षण करने, $('#foo').data('helptext', 'Testing 123');
नहीं करता है के रूप में देखा मान अपडेट कंसोल लेकिन $('#foo').attr('data-helptext', 'Testing 123');
करता है।