আপনি যদি সার্ভার থেকে কোনও ডিওএম এলিমেন্টে ডেটা পাঠাচ্ছেন তবে আপনার এলিমেন্টটিতে ডেটা সেট করা উচিত:
<a id="foo" data-foo="bar" href="#">foo!</a>
এরপরে .data()
jQuery ব্যবহার করে ডেটা অ্যাক্সেস করা যায়:
console.log( $('#foo').data('foo') );
//outputs "bar"
যাইহোক আপনি যখন jQuery ডেটা ব্যবহার করে কোনও ডিওএম নোডে ডেটা সঞ্চয় করেন তখন ভেরিয়েবলগুলি নোড অবজেক্টে সংরক্ষণ করা হয় । এটি জটিল বস্তু এবং রেফারেন্সগুলিকে নোড এলিমেন্টে ডেটা সংরক্ষণ করার হিসাবে একটি অ্যাট্রিবিউট হিসাবে স্ট্রিংয়ের মানগুলিকে সামঞ্জস্য করতে পারে।
উপরে থেকে আমার উদাহরণ অবিরত:
$('#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
এছাড়াও, ডেটা অ্যাট্রিবিউটগুলির জন্য নামকরণের সম্মেলনে কিছুটা গোপন "গোটচা" থাকে:
এইচটিএমএল:
<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
হাইফেনেটেড কীটি এখনও কাজ করবে:
এইচটিএমএল:
<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
এটি এই কারণেই আমি জাভাস্ক্রিপ্টে হাইফেনেটেড কী এড়ানো পরামর্শ দিই।
এইচটিএমএলের জন্য, হাইফেনেটেড ফর্মটি ব্যবহার করা চালিয়ে যান। এইচটিএমএল বৈশিষ্ট্যাবলী হওয়া ASCII-lowercased স্বয়ংক্রিয়ভাবে পেতে অনুমিত হয় , তাই <div data-foobar></div>
, <DIV DATA-FOOBAR></DIV>
এবং <dIv DaTa-FoObAr></DiV>
হয় অনুমিত অভিন্ন হিসাবে গণ্য করা হবে, কিন্তু সবচেয়ে ভালো সামঞ্জস্যের জন্য ছোট হাতের ফর্ম পছন্দের দিতে হবে।
.data()
যদি মান কোন স্বীকৃত ধরণের সাথে মেলা পদ্ধতি এছাড়াও কিছু মৌলিক স্বয়ংক্রিয় ঢালাই সম্পন্ন করবেন
এইচটিএমএল:
<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()
:
এইচটিএমএল:
<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 আরসি 1 হিসাবে আর পার্স করা হয়নি ।
jQuery 1.8 আরসি 1 অটো-কাস্টিংয়ের আচরণ পরিবর্তন করেছে । আগে, যে কোনও ফর্ম্যাট যা বৈধ উপস্থাপনা ছিল তাতে Number
কাস্ট করা হবে Number
। এখন, সংখ্যাসূচক মানগুলি কেবল স্বতঃ-কাস্ট হয় যদি তাদের প্রতিনিধিত্ব একই থাকে। এটি একটি উদাহরণ দিয়ে সবচেয়ে ভাল চিত্রিত করা হয়।
এইচটিএমএল:
<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