2013-08-07 6 views
50

मैं एक कस्टम डेटा-विशेषता डिफ़ॉल्ट रूप से स्थापित है:प्राप्त डेटा-विशेषता jQuery बनाम जावास्क्रिप्ट

data-equipment="0"

तो मैं jQuery .data()

$(this).data("equipment", 10)

उपयोग करने के साथ इसे बदल

और फिर getAttribute()

का उपयोग करें

this.getAttribute("data-equipment")

मुझे पुराना मान (0) मिलता है और नया नहीं (10)। लेकिन अगर मैं

$(this).data("equipment") का उपयोग करता हूं तो मुझे नया मान (10) मिलता है।

क्या यह इस तरह काम करना चाहिए या क्या मुझे कुछ याद आ रहा है?

धन्यवाद!

+1

'.data()' वास्तव में डेटा विशेषताओं का समर्थन नहीं करता है। यह विशेषता से मूल्य को पकड़ लेता है और उसके बाद कभी भी विशेषता को अद्यतन किए बिना इसे अपने डेटा संग्रहण का उपयोग करता है। मैं व्यक्तिगत रूप से इसके लिए jQuery की '.data()' का उपयोग नहीं करता। –

+0

डेटा- विशेषता element.dataset का उपयोग कर सुलभ है जिसे मैं jQuery द्वारा उपयोग नहीं किया जाता है। – Virus721

उत्तर

45

.data() डेटा विशेषताओं पर काम नहीं करता है लेकिन आंतरिक jQuery कैश में। प्रारंभ में यदि कोई कैश रिकॉर्ड नहीं मिलता है, तो डेटा मौजूद होने पर संबंधित data- विशेषता से डेटा पढ़ा जाता है, लेकिन यह उनके सहयोग का अंत है।

यदि यह विशेषताओं पर संचालित होता है, तो यह इसके उद्देश्य के लिए बेकार होगा क्योंकि विशेषता मान स्ट्रिंग होना चाहिए।

+1

मुझे लगता है कि यह '$ (यह) .डेटा (" उपकरण ")' और '$ (यह) .attr (" डेटा-उपकरण ") 'के बीच मुख्य अंतर है। यदि आप '$ (this) .डेटा (" उपकरण ") के साथ कुछ डेटा विशेषता पुनर्प्राप्त करते हैं और' $ (this) .attr ("डेटा-उपकरण", "कुछ मान") के साथ विशेषता मान बदलते हैं, तो आप पुनर्प्राप्त नहीं कर सकते jQuery के कैशिंग तंत्र के कारण '$ (यह) .डेटा (" उपकरण ") के साथ नया मान। – beawolf

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