2014-09-16 17 views
39

हाल ही में मैं दूर कोडिंग गया था, और मैं एक अजीब मुद्दे में भाग गया। मैं अपने द्वारा बनाए गए नए तत्व (jQuery के माध्यम से) में डेटा विशेषता असाइन करने का प्रयास कर रहा था, केवल यह पता लगाने के लिए कि यह वास्तव में विशेषता असाइन नहीं करेगा।JQuery .data() काम नहीं कर रहा है?

http://jsfiddle.net/y95p100c/1/

किसी भी विचार क्यों यह हो रहा है: एक उदाहरण के लिए नीचे दिए गए लिंक देखें, कोड नीचे दिया गया है? मैंने इसकी जांच कभी नहीं ठोकर खाई है ...

var div = $("<div />") 
$(div).data("foo", "bar") 
console.log($(div)[0].outerHTML) // prints <div></div> 
+0

jQuery के '.data()' समारोह भंडार मूल्यों आंतरिक रूप से। – j08691

उत्तर

99

datadata-* विशेषताओं को सेट नहीं है। यह data-* विशेषताओं से संबंधित डेटा कैश का प्रबंधन करता है। यह data-* से गुण initializes अगर कोई मौजूद हैं, लेकिन कभी नहीं उन्हें लिखता है। किसी विशेषता को लिखने के लिए, attr का उपयोग करें।

उदाहरण: Updated Fiddle

var div = $("<div />") 
$(div).attr("data-foo", "bar") 
console.log($(div)[0].outerHTML) 

आप जो देख रहे सिर्फ कई मायनों यह आश्चर्य की बात हो सकती है में से एक है। एक और है कि अगर अपने मार्कअप <div id="elm" data-foo="bar"></div> है और कुछ बिंदु पर आप $("#elm").data("foo") का उपयोग मूल्य (और यह वास्तव में "bar" हो जाएगा) प्राप्त करने के लिए है, तो आप $("#elm").data("foo", "update") करते हैं, विशेषता data-foo="bar" बनी हुई है, लेकिन डेटा data द्वारा प्रबंधित अब foo"update" के बराबर है। लेकिन शासन से ऊपर यह बताते हैं: data कभी नहीं लिखते हैंdata-* को attrs।

+2

दिलचस्प, मैंने भी कोशिश की थी .prop() और यह भी असफल रहा। धन्यवाद! – user1143682

+2

@ user1143682: ऐसा इसलिए है क्योंकि गुण गुण नहीं हैं। :-) यह सिर्फ इतना है कि पूर्व-निर्धारित विशेषताओं का एक बहुत गुण परिलक्षित है ('id',' className', 'rel',' src', ...) है। ('Prop' शायद * किया *' div' तत्व पर एक संपत्ति बनाने के लिए, लेकिन जब आप, 'outerHTML' को देखो, क्योंकि वे एचटीएमएल नहीं कर रहे हैं उन लोगों के धारावाहिक नहीं हैं।) –

+0

इस सटीक एक ही समस्या में पड़ गए; अच्छा जवाब, यह मेरे लिए स्पष्ट करने में मदद की। –

18

jQuery data- गुण जब तत्व भरी हुई है आयात करता है, लेकिन बाद में इसे का उपयोग नहीं करता है। तत्व एक jQuery आंतरिक संरचना में संग्रहीत हैं। the API से:

data- विशेषताओं पहली बार में खींच रहे हैं डेटा संपत्ति एक्सेस किया जाता है और उसके बाद नहीं रह पहुँचा या उत्परिवर्तित कर रहे हैं (सभी डेटा मानों तो jQuery में आंतरिक रूप से जमा हो जाती है)।

+2

+1 18:49:44 (मेरे समय क्षेत्र में) बनाम 18:49:53। वाह। बस वाह। –

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