यदि आप सर्वर से DOM तत्व पर डेटा पास कर रहे हैं, तो आपको तत्व पर डेटा सेट करना चाहिए:
<a id="foo" data-foo="bar" href="#">foo!</a>
डेटा को तब .data()
jQuery के उपयोग से एक्सेस किया जा सकता है :
console.log( $('#foo').data('foo') );
//outputs "bar"
हालाँकि जब आप डेटा का उपयोग करके jQuery में DOM नोड पर डेटा स्टोर करते हैं, तो चर नोड ऑब्जेक्ट पर संग्रहीत होते हैं । यह जटिल वस्तुओं और संदर्भों को समायोजित करने के लिए है क्योंकि नोड तत्व पर डेटा को संग्रहीत करना एक विशेषता के रूप में केवल स्ट्रिंग मानों को समायोजित करेगा।
ऊपर से मेरा उदाहरण जारी रखना:
$('#foo').data('foo', 'baz');
console.log( $('#foo').attr('data-foo') );
//outputs "bar" as the attribute was never changed
console.log( $('#foo').data('foo') );
//outputs "baz" as the value has been updated on the object
इसके अलावा, डेटा विशेषताओं के लिए नामकरण सम्मेलन में एक छिपा हुआ "गोचा" है:
HTML:
<a id="bar" data-foo-bar-baz="fizz-buzz" href="#">fizz buzz!</a>
जे एस:
console.log( $('#bar').data('fooBarBaz') );
//outputs "fizz-buzz" as hyphens are automatically camelCase'd
हाइफ़न की गई कुंजी अभी भी काम करेगी:
HTML:
<a id="bar" data-foo-bar-baz="fizz-buzz" href="#">fizz buzz!</a>
जे एस:
console.log( $('#bar').data('foo-bar-baz') );
//still outputs "fizz-buzz"
हालाँकि जिस वस्तु द्वारा लौटाया जाता है .data()
उसमें हाइफ़न किया हुआ कुंजी सेट नहीं होगा:
$('#bar').data().fooBarBaz; //works
$('#bar').data()['fooBarBaz']; //works
$('#bar').data()['foo-bar-baz']; //does not work
यह इस कारण से है कि मेरा सुझाव है कि जावास्क्रिप्ट में हाइफ़न की गई कुंजी से बचना।
HTML के लिए, हाइफ़न फॉर्म का उपयोग करते रहें। एचटीएमएल विशेषताओं ASCII-लोवरकेस स्वचालित रूप से प्राप्त करने के लिए की अपेक्षा की जाती है, तो <div data-foobar></div>
, <DIV DATA-FOOBAR></DIV>
है, और <dIv DaTa-FoObAr></DiV>
कर रहे हैं चाहिए समान रूप में व्यवहार किया है, लेकिन सबसे अच्छा संगतता के लिए लोअर केस रूप प्राथमिकता दी जानी चाहिए।
.data()
यदि मान किसी मान्यता प्राप्त नमूने का मिलान विधि भी कुछ बुनियादी ऑटो कास्टिंग प्रदर्शन करेंगे:
HTML:
<a id="foo"
href="#"
data-str="bar"
data-bool="true"
data-num="15"
data-json='{"fizz":["buzz"]}'>foo!</a>
जे एस:
$('#foo').data('str'); //`"bar"`
$('#foo').data('bool'); //`true`
$('#foo').data('num'); //`15`
$('#foo').data('json'); //`{fizz:['buzz']}`
यह ऑटो-कास्टिंग क्षमता तत्काल विजेट और प्लगइन्स के लिए सुविधाजनक है:
$('.widget').each(function () {
$(this).widget($(this).data());
//-or-
$(this).widget($(this).data('widget'));
});
यदि आपके पास मूल मूल्य स्ट्रिंग के रूप में होना चाहिए, तो आपको उपयोग करने की आवश्यकता होगी .attr()
:
HTML:
<a id="foo" href="#" data-color="ABC123"></a>
<a id="bar" href="#" data-color="654321"></a>
जे एस:
$('#foo').data('color').length; //6
$('#bar').data('color').length; //undefined, length isn't a property of numbers
$('#foo').attr('data-color').length; //6
$('#bar').attr('data-color').length; //6
यह एक आकस्मिक उदाहरण था। रंग मूल्यों को संग्रहीत करने के लिए, मैंने संख्यात्मक हेक्स नोटेशन (यानी 0xABC123) का उपयोग किया, लेकिन यह ध्यान देने योग्य है कि हेक्स को 1.7.2 से पहले jQuery संस्करणों में गलत तरीके से पार्स किया गया था , और अब Number
jQuery 1.8 rc 1 के रूप में पार्स नहीं किया गया है ।
jQuery 1.8 आरसी 1 ने ऑटो-कास्टिंग के व्यवहार को बदल दिया । इससे पहले, कोई भी प्रारूप जो एक वैध प्रतिनिधित्व था, Number
को कास्ट किया जाएगा Number
। यदि उनका प्रतिनिधित्व समान रहता है तो अब, मूल्य जो संख्यात्मक हैं, केवल ऑटो-कास्ट हैं। यह एक उदाहरण के साथ सबसे अच्छा सचित्र है।
HTML:
<a id="foo"
href="#"
data-int="1000"
data-decimal="1000.00"
data-scientific="1e3"
data-hex="0x03e8">foo!</a>
जे एस:
// pre 1.8 post 1.8
$('#foo').data('int'); // 1000 1000
$('#foo').data('decimal'); // 1000 "1000.00"
$('#foo').data('scientific'); // 1000 "1e3"
$('#foo').data('hex'); // 1000 "0x03e8"
यदि आप संख्यात्मक मानों को एक्सेस करने के लिए वैकल्पिक सांख्यिक सिंटैक्स का उपयोग करने की योजना बनाते हैं, तो मान को Number
पहले एक जैसे +
संचालक के साथ डालना सुनिश्चित करें ।
जेएस (प्रतियोगिता):
+$('#foo').data('hex'); // 1000