2009-07-30 13 views
5

यह मेरी समझ में है कि डॉलर में साइन के माध्यम से jQuery में किसी भी DOM तत्व का संदर्भ देना (जैसे: $("#mydiv")), एक ऑब्जेक्ट देता है।मैं एक jQuery ऑब्जेक्ट को एक संपत्ति कैसे आवंटित कर सकता हूं?

मैं जैसे एक वस्तु के लिए एक अतिरिक्त संपत्ति जोड़ने के लिए देख रहा हूँ:

$("#mydiv").myprop = "some value"; 

लेकिन यह काम करने के लिए प्रतीत नहीं होता। मैं इस ऑब्जेक्ट में एक मान स्टोर करने की कोशिश कर रहा हूं, इसलिए मैं इसे बाद में संदर्भित कर सकता हूं।

निम्नलिखित कोड, हालांकि, मुझे संपत्ति सेट करने के तुरंत बाद मुझे undefined मान देता है।

$("#mydiv").myprop = "some value"; 
alert($("#mydiv").myprop); 

इस कोड काम नहीं करता है या तो:

$("#mydiv")["myprop"] = "some value"; 
alert($("#mydiv").myprop); 

वहाँ इस लक्ष्य को हासिल करने के लिए एक तरीका है? या मुझे $("#mydiv").attr("myprop", "some value") के माध्यम से DOM ऑब्जेक्ट पर गुणों के रूप में मेरे सभी गुणों को स्टोर करने की आवश्यकता है (यह बहुत कम वांछनीय है)।

धन्यवाद!

+0

मुझे नहीं लगता कि आप यह कर सकते हैं ... आपको अपने अंतिम वक्तव्य के साथ जाना पड़ सकता है ... – Jason

उत्तर

13

jQuery data विधि के साथ एक संपत्ति-बैग की अवधारणा का खुलासा करता है।

// set some arbitrary data 
$('#selector').data('example-property', exampleValue); 

// get the value later 
var theValue = $('#selector').data('example-property') 

यह डीओएम मैनिप्लेशंस से बचाता है जो प्रदर्शन के मामले में महंगा हो सकता है।

+0

ओह्ह्ह .... अच्छा। – seth

+0

आपको बहुत बहुत धन्यवाद! यह वही है जो मैं ढूंढ रहा था! :) –

1

$ फ़ंक्शन एक jquery ऑब्जेक्ट बनाता है जो एक डोम तत्व का प्रतिनिधित्व करता है। आप ऑब्जेक्ट के गुणों को बदल सकते हैं, लेकिन उन परिवर्तनों को "प्रतिनिधित्व" तत्व में स्पष्ट नहीं किया जाएगा जब तक कि jquery जानता है कि उनके साथ क्या करना है (शायद एक क्लिक ईवेंट हैंडलर असाइन करना)।

तो जब आप पहला चयन करते हैं, तो यह आपके द्वारा बनाई गई वस्तु को संशोधित करता है, लेकिन वास्तविक HTML तत्व से कुछ भी नहीं करता है। जब आप $ फिर से चलाते हैं, तो यह एक अलग वस्तु बनाता है, जो आपके द्वारा किए गए विशेषता परिवर्तन को बनाए रखता नहीं है।

आप एक HTML वस्तु के लिए एक सीधा परिवर्तन करने के लिए सक्षम हो सकता है:। (JQuery के बिना)

getElementByID ("theid") myprop = "हैलो दुनिया";

परिणामस्वरूप: <p id="theid" myprop="hello world"></p> लेकिन एक jquery ऑब्जेक्ट की विशेषता सेट करना बस ऐसा नहीं करेगा। Jquery में समकक्ष प्रभाव प्राप्त करने के लिए, केन ब्राउनिंग का सुझाव दिया गया .डेटा विधि का उपयोग करें। (बहुत देर हो चुकी है ...): डी

+0

आपको बहुत धन्यवाद। यह जानना अच्छा है लेकिन मैं जो कुछ भी ढूंढ रहा था वह काफी नहीं था। वोट, हालांकि। –

1

मुझे यकीन नहीं है कि यह jQuery में बदलाव के कारण गीला है या नहीं। लेकिन मैंने सवाल में वर्णित यह काफी किया है ...

function SelectAll(domElm){ 
    alert(domElm.myProp); 
} 

जैसा कि मैंने कहा -:

var domElem = $('#selector'); 
domElem.myProp = "Hello world"; 

अब मेरे मामले में मैं बाद में एक विधि कॉल में इस वस्तु का उपयोग करने के:

<span onclick=\"SelectAll(domElem)\">Click me!</span> 

विधि तो इस तरह कर सकते हैं यह jQuery इंजन में एक अद्यतन हो सकता है, लेकिन ऐसा लगता है कि .data() कॉल की अब आवश्यकता नहीं है :-)

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

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