2010-05-04 12 views
54

मैं अपने आवेदन में .data() का उपयोग करना चाहता हूं। examples सहायक हैं, लेकिन मुझे समझ में नहीं आता है कि मूल्य कहां संग्रहीत किए जाते हैं।jQuery .data() कैसे काम करता है?

मैं Firebug के साथ वेब पेज का निरीक्षण किया और जैसे ही .data() एक डोम तत्व को एक वस्तु की बचत होती है, मैं नहीं दिख रहा है Firebug में किसी भी परिवर्तन (या तो HTML या डोम टैब्स)।

मैंने jQuery स्रोत को देखने का प्रयास किया, लेकिन यह मेरे जावास्क्रिप्ट ज्ञान के लिए बहुत उन्नत है और मैंने खुद को खो दिया है।

तो सवाल यह है:

कहाँ मूल्यों jQuery.data द्वारा संग्रहीत() वास्तव में जाते हैं? क्या मैं किसी उपकरण का उपयोग करके उन्हें ढूंढ/ढूंढ/सूची/डीबग कर सकता हूं?

+3

आप firequery उपयोग करना चाहिए। 'डेटा()' आपके डेटा के साथ jquery डोम बढ़ाता है ... आपको उन्हें अग्नि अग्निशामक देखने में सक्षम होना चाहिए – meo

+1

क्या आपने minified स्रोत को देखा? यदि आपने किया है, तो बस इतना ही बुरा मत मानो क्योंकि यह सब कुछ सिर्फ ब्राउज़र के लिए पूरी तरह से समझ में नहीं आता है। यहां तक ​​कि गैर संपीड़ित स्रोत भी बहुत उन्नत है और अक्सर देखना मुश्किल है। : डी –

+0

मैंने कार्यान्वयन का एक उदाहरण बनाया: इसे जांचें, यह बहुत आसान है: https://jsfiddle.net/andrevlima/zb8oo0p0/24/ storeData (तत्व, डेटा) // -> नया डेटा स्टोरडेटा (तत्व)// -> पंजीकृत डेटा प्राप्त करें –

उत्तर

39

इसके लिए source पर एक नज़र डालें।

शीघ्रता से देखने से, ऐसा लगता है कि यह है कि cache चर में डेटा है कि लाइन पर बनाई गई है भंडारण है 2.

संपादित करें:

यहाँ एक त्वरित प्रदर्शन कैश में डेटा पता चलता है कि है : http://jsfiddle.net/CnET9/

आप अपने कंसोल पर $.cache भी डंप कर सकते हैं और इसे मैन्युअल रूप से एक्सप्लोर कर सकते हैं।

+0

नहीं, यह कैश चर केवल कुछ jQuery आंतरिक सामान है। डेटा वास्तव में एक डीओएम तत्व से जुड़ा हुआ है। बीटीडब्ल्यू: क्या उन्होंने यह इंगित नहीं किया कि जेक्यू स्रोत कोड सहायक नहीं था? तो उसे वहां क्यों इंगित करें? – selfawaresoup

+6

@Techpriester - आप गलत हैं, यह ** आपके कैम वैरिएबल पर संग्रहीत है, जो आपके डीओएम तत्व का प्रतिनिधित्व करने वाली कुंजी का उपयोग कर रहा है, यह ** ** ** डॉम तत्व पर ही संग्रहीत नहीं है। –

+6

क्योंकि मुझे लगता है कि वह सीधे jQuery स्रोत को देख रहा है, गिटहब पर अच्छी तरह व्यवस्थित स्रोत नहीं। – Matt

4

तुम बस पैरामीटर के बिना .data() बुला, इस तरह से यह निरीक्षण कर सकते हैं:

$("div").data("thing", "value");​​​​​​ 
console.log($("div").data()); 
//or... 
console.log($.data($("div").get(0))); 

"कहाँ", यह एक वैश्विक jQuery कैश वस्तु में एक महत्वपूर्ण तत्व है कि अपने प्रतिनिधित्व के तहत संग्रह किया गया है का सवाल है। कॉलिंग .data() वास्तव में jQuery.data(yourDomElement) लौटाता है, या यदि आप इससे विशिष्ट मान मांगते हैं तो उस पर कुंजी लगाएं।

6

आपको लगता है कि यह कहां मिल गया है, लेकिन यहां पर थोड़ा सा तरीका है। कुछ नियम हैं जिनका उपयोग करने से पहले आपको अवगत होना चाहिए।

जोड़ना

जोड़ना वस्तु $ से लौटे का उपयोग कर चर ('। चयनकर्ता')। डेटा() काम करता है क्योंकि डेटा ऑब्जेक्ट संदर्भ द्वारा गुजरता है, तो कहीं भी आप प्रॉपर्टी जोड़ना, यह जोड़ा जाता है। यदि आप किसी अन्य तत्व पर डेटा() कहते हैं, तो यह बदल जाता है। यह यह क्या यह क्या है है

var oData = $('#id').data(); 
oData.num = 0; 
oData.num == $('#id').data().num; // true 

एक वस्तु जोड़ना डेटा वस्तु के अंदर एक वस्तु देता है, साथ ही है ... "पहले से उस तत्व के साथ संग्रहीत डेटा फैली हुई है।" - http://api.jquery.com/data/#entry-longdesc

इसका मतलब है कि dataObj को एक obj जोड़ने हो जाता है

oData.obj = {};  
oData === { /*previous data*/, obj : { } } 

एक सरणी पहले से संग्रहीत डेटा विस्तार नहीं करता है जोड़ा जा रहा है, लेकिन या तो एक साधारण मूल्य के रूप में ही व्यवहार करते हैं नहीं है ...

का उपयोग कर आप सरल मान संग्रहीत है, तो आप उन्हें चर में जगह है और डेटा ऑब्जेक्ट को बदले बिना क्या आप उनके साथ चाहते हैं कर सकते हैं।

तथापि

यदि आप एक वस्तु या एक तत्व पर डाटा स्टोर करने की सरणी का उपयोग कर रहे हैं, सावधान!

सिर्फ इसलिए कि आप इसे एक चर में संग्रहीत करते हैं, इसका मतलब यह नहीं है कि आप डेटा मान नहीं बदल रहे हैं। सिर्फ इसलिए कि आप इसे किसी फ़ंक्शन में पास करते हैं, इसका मतलब यह नहीं है कि आप डेटा मान नहीं बदल रहे हैं!

यह वही है जो यह है .. जब तक कि यह आसान न हो .. तो यह सिर्फ एक प्रति है। : Http://firequery.binaryage.com/: p

var data    = $("#id").data(); // Get a reference to the data object 
data.r_redirect  = "index.php";  // Add a string value 
data.num    = 0;    // Add a integer value 
data.arr    = [0,1,2];   // Add an array 
data.obj    = { a : "b" };  // Add an object 

             // but here is where the fun starts! 

var r_redirectString = data.r_redirect; // returns "index.php", as expected.. cool 
r_redirectString  = "changed"   // change the value and the compare : 
data.r_redirect  == r_redirectString // returns false, the values are different 

var oArr    = data.arr;   // Now lets copy this array 
oArr.push(3);       // and modify it. 
data.arr   == oArr    // should be false? Nope. returns true. 
             // arrays are passed by reference. 
             // but.. 

var oObj    = data.obj   // what about objects?  
oObj["key"]   = "value";   // modify the variable and 
data.obj["key"]  == oObj["key"]  // it returns true, too! 

तो, संसाधनों ..

What's the best way to store multiple values for jQuery's $.data()? https://stackoverflow.com/a/5759883/1257652

+1

कृपया डाउनवोट को समझाने के लिए एक टिप्पणी छोड़ दें –

संबंधित मुद्दे