क्या डोम एलिमेंट ऑब्जेक्ट्स को सीधे गुण (या विधियों) जोड़ने में कोई समस्या है?
संभावित
।
कोई वेब मानक आप डोम नोड्स मनमाने ढंग से गुण जोड़ सकते हैं का कहना है कि नहीं है। वे ब्राउज़र-विशिष्ट कार्यान्वयन के साथ 'होस्ट ऑब्जेक्ट्स' हैं, न कि 'देशी जावास्क्रिप्ट ऑब्जेक्ट्स' जो ईसीएमए -262 के अनुसार आप जो भी पसंद कर सकते हैं वह कर सकते हैं। अन्य होस्ट ऑब्जेक्ट्स आपको मनमानी गुणों को जोड़ने की अनुमति नहीं देंगे।
हकीकत में के बाद से जल्द से जल्द ब्राउज़र आपको यह करने के लिए अनुमति देने के लिए किया था, यह एक वास्तविक मानक है कि आप वैसे भी ... जब तक आप जानबूझकर आईई बता document.expando= false
सेट करके आप उसे अस्वीकृत करने के लिए कर सकते हैं। आप शायद खुद ऐसा नहीं करेंगे, लेकिन यदि आप कहीं और तैनात करने के लिए एक स्क्रिप्ट लिख रहे हैं तो यह आपको चिंता कर सकता है।
एक व्यावहारिक समस्या यह है कि आप वास्तव में नहीं पता है कि मनमाने ढंग से नाम आपके द्वारा चुने गए कुछ ब्राउज़र आप अभी तक परीक्षण नहीं किया है, या एक में में एक मौजूदा अर्थ नहीं है में मनमाने ढंग से-गुणों के साथ नहीं है ब्राउज़र या मानक का भविष्य संस्करण जो अभी तक मौजूद नहीं है। एक संपत्ति जोड़ें, और आप यह सुनिश्चित नहीं कर सकते कि अंतरिक्ष और समय में कहीं भी कोई भी ब्राउज़र उस रोमांचक क्रोम सॉसेज को ब्राउज़र क्रैश सुविधा बनाने के लिए सिग्नल के रूप में उपयोग नहीं करेगा। तो यदि आप एक मनमानी संपत्ति जोड़ते हैं, तो इसे एक असंभव नाम देना सुनिश्चित करें, उदाहरण के लिए element._mylibraryname_sausage= true
। यह अन्य स्क्रिप्ट घटकों के साथ नेमस्पेस विवादों को रोकने में भी मदद करता है जो मनमाने ढंग से गुण जोड़ सकते हैं।
कि गुण आप गलत तरीके से जोड़ने विशेषताओं के रूप में इलाज कर रहे हैं में IE में एक और समस्या है। यदि आप innerHTML
के साथ तत्व को क्रमबद्ध करते हैं तो आपको आउटपुट में एक अप्रत्याशित विशेषता मिलेगी, उदाहरण के लिए। <p _mylibraryname_sausage="true">
। यदि आप उस HTML स्ट्रिंग को किसी अन्य तत्व को असाइन करते हैं, तो आपको नए तत्व में एक संपत्ति मिल जाएगी, संभावित रूप से आपकी स्क्रिप्ट को भ्रमित कर रही है।
(ध्यान दें कि यह केवल गुण जिनके मान सरल प्रकार के होते हैं के लिए होता है, वस्तुओं, अरै, और फ़ंक्शन धारावाहिक HTML में दिखाई नहीं देती हैं।मेरी इच्छा है कि jQuery इस बारे में जानता था, क्योंकि data
विधि को लागू करने के लिए यह जिस तरह से काम करता है, वह बिल्कुल भयानक है, बग में परिणाम होता है, और कई साधारण डीओएम ऑपरेशंस धीमा कर देता है।)
+1, हालांकि मेरी इच्छा है कि आपने HTML5 ' डेटा- * 'भंडारण (http://dev.w3.org/html5/spec/Overview.html#attr-data)। JQuery से डब्लूआरटी, 'डेटा' स्टोरेज को 1 एक्समेरिक वैल्यू संग्रहीत करने वाले एक्सपो एट्रिब्यूट के रूप में कार्यान्वित किया गया है जो 'jQuery.cache' में एक कुंजी पर मैप करता है। सिद्धांत यह है कि 'jQuery.cache' को ब्राउज़र द्वारा अनलोड पर स्वतंत्र रूप से पुनः दावा किया जा सकता है क्योंकि यह किसी भी DOM तत्व से अनुपयुक्त है, और इसके विपरीत DOM तत्व को स्वतंत्र रूप से कचरा एकत्र किया जा सकता है क्योंकि यह किसी भी आत्म-संदर्भ ऑब्जेक्ट/फ़ंक्शन/आदि खुद पर। मुझे वहां समस्या नहीं दिख रही है? –
समस्या है (1) jQuery को HTML पर 'jQuery (संख्या)' विशेषता को किसी भी समय HTML (जैसे 'html()' या 'क्लोन()') पर ऑपरेशन करना है। यह एक regex के माध्यम से स्ट्रिंग चिपकाने (uuuurrrrrgghhh) द्वारा करता है। तो यदि आप एक अनुच्छेद क्लोन करते हैं जिसमें पाठ 'jQuery0 = "foo" 'है, तो पाठ गायब हो जाएगा। (2) अब इसे आईडी, डीओएम ऑपरेशंस का ट्रैक रखना है जो त्वरित और आसान नहीं होना चाहिए। उदाहरण के लिए 'तत्व (हटाएं' तत्व को आज़माएं और देखें क्योंकि jQuery प्रत्येक अवरोही नोड में रिकॉर्ड्स करता है जो डेटा आईडी को फेंकने के लिए देखता है। ओह प्रिय। – bobince
+1। सामान्य के रूप में महान जवाब। –