2009-09-09 10 views
75

मैं एक जावास्क्रिप्ट ऑब्जेक्ट को HTML तत्व से जोड़ना चाहता हूं। क्या ऐसा करने के लिए एक सरल तरीका है?क्या HTML तत्वों को जावास्क्रिप्ट ऑब्जेक्ट्स संलग्न करने का कोई अच्छा तरीका है?

मैंने देखा HTML DOM एक setAttribute पद्धति निर्धारित करता है और इस तरह मनमाना विशेषता नाम के लिए परिभाषित किया गया है ऐसा लगता है। हालांकि यह केवल स्ट्रिंग मान सेट कर सकता है। (आप निश्चित रूप से एक शब्दकोश में दुकान कुंजी के लिए इसका उपयोग कर सकते हैं।)

सुनिश्चित वर्णन (हालांकि मैं ज्यादातर सामान्य प्रश्न में दिलचस्पी रखता हूँ): विशेष रूप से

, मैं एक पेड़ में नोड्स का प्रतिनिधित्व HTML तत्वों है और मैं ड्रैग-एंड-ड्रॉप को सक्षम करने की कोशिश कर रहा हूं, लेकिन jQuery ड्रॉप इवेंट केवल मुझे तत्वों को खींचा और गिरा दिया जाएगा।

इवेंट हैंडलरों को जानकारी प्राप्त करने के लिए सामान्य पैटर्न एक ही समय में HTML तत्व बनाने के लिए प्रतीत होता है जैसे आप जावास्क्रिप्ट ऑब्जेक्ट बना रहे हैं और फिर इन जावास्क्रिप्ट ऑब्जेक्ट्स को बंद करके ईवेंट हैंडलर को परिभाषित करने के लिए - हालांकि यह काम नहीं करता है इस मामले में बहुत अच्छी तरह से (मेरे पास एक वैश्विक वस्तु हो सकती है जो ड्रैग शुरू होने पर पॉप्युलेट हो जाती है ... लेकिन यह थोड़ा बुरा लगता है)।

उत्तर

35

आप jQuery data() विधि को देखा है? यदि आप चाहते हैं तो आप तत्व को जटिल ऑब्जेक्ट्स असाइन कर सकते हैं या आप कम से कम किसी ऑब्जेक्ट (या किसी अन्य डेटा) के संदर्भ को पकड़ने के लिए उस विधि का लाभ उठा सकते हैं।

+7

धन्यवाद: यह वही है जो मैं ढूंढ रहा था। दिलचस्प बात यह है प्रत्येक तत्व पर एक स्ट्रिंग विशेषता में एक वैश्विक शब्दकोश में इस विधि jQuery भंडार कुंजी परिभाषित करने के लिए। Jquery पहली बार लोड होने पर इस स्ट्रिंग विशेषता का नाम यादृच्छिक रूप से जेनरेट किया जाता है। (सुझाव वहाँ केवल डोम का उपयोग कर यह करने के लिए एक अच्छा तरीका नहीं है क्या करने के लिए एक अच्छा तरीका नहीं है कि) – user47741

+3

यह ध्यान देने योग्य है कि jQuery के 'डेटा()' * काम करता है * [जवाब bobince का उपयोग करके दे दी है लायक है ] (http://stackoverflow.com/a/1402782/42921) इसलिए यदि आप पहले से ही jquery का उपयोग नहीं कर रहे हैं, तो आप इसका भी उपयोग कर सकते हैं। –

+4

मजेदार कैसे मैं 6 साल बाद इस जवाब पर वापस देख सकता हूं और सोच सकता हूं, "यह एक बहुत ही उप-इष्टतम उत्तर है। @ बॉबेंस को स्वीकार्य होना चाहिए"। –

79

JavaScript ऑब्जेक्ट के कुछ खास नहीं आप इसे अनुमति देने के लिए क्या करना है वहाँ उन्हें सौंपे गए मनमाने ढंग से गुण होते हैं कर सकते हैं। इसमें डीओएम तत्व शामिल हैं; हालांकि यह व्यवहार डीओएम मानक का हिस्सा नहीं है, यह मामला जावास्क्रिप्ट के पहले संस्करणों पर वापस जा रहा है और पूरी तरह से विश्वसनीय है।

var div= document.getElementById('nav'); 
div.potato= ['lemons', 3]; 
+3

@ tat.wright - एचटीएमएल तत्वों पर मनमानी गुणों के बारे में बोल रहे हैं जिन्हें एक्सपोन्डो गुण कहा जाता है। यह भी ध्यान रखें कि div.potato का मतलब div.getAttribute ("आलू") – nickytonline

+2

यह बिल्कुल विश्वसनीय नहीं है। उदाहरण के लिए, IE में 'document.expando = false' पर एक कॉल दस्तावेज़ के भीतर HTML तत्वों पर सभी विस्तार गुणों को रोकता है। –

+33

@ टिम डाउन: तो बस इसे मत करें। मैं यह देखने में असफल रहा कि यह विश्वसनीय क्यों नहीं है - यह कहने जैसा है कि स्ट्रिंग ऑब्जेक्ट अविश्वसनीय है, क्योंकि आप इसे शून्य पर सेट कर सकते हैं। – simon

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

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