javascript - डोम एलिमेंट ऑब्जेक्ट्स में गुण जोड़ने के साथ क्या गलत है?




2 Answers

क्या डोम एलिमेंट ऑब्जेक्ट्स को सीधे गुण (या विधियों) जोड़ने में कोई समस्या है?

संभावित।

कोई वेब मानक नहीं है जो कहता है कि आप डोम नोड्स में मनमानी गुण जोड़ सकते हैं। वे ब्राउज़र-विशिष्ट कार्यान्वयन के साथ 'होस्ट ऑब्जेक्ट्स' हैं, न कि 'देशी जावास्क्रिप्ट ऑब्जेक्ट्स' जो ईसीएमए -262 के अनुसार आप जो भी पसंद कर सकते हैं वह कर सकते हैं। अन्य होस्ट ऑब्जेक्ट्स आपको मनमानी गुणों को जोड़ने की अनुमति नहीं देंगे।

हकीकत में, क्योंकि शुरुआती ब्राउज़रों ने आपको ऐसा करने की अनुमति दी है, यह वास्तव में एक मानक मानक है जिसे आप वैसे भी कर सकते हैं ... जब तक आप जानबूझकर IE. को document.expando= false . document.expando= false सेट करके इसे अस्वीकार करने के लिए नहीं बताते। आप शायद खुद ऐसा नहीं करेंगे, लेकिन यदि आप कहीं और तैनात करने के लिए एक स्क्रिप्ट लिख रहे हैं तो यह आपको चिंता कर सकता है।

मनमाने ढंग से गुणों के साथ एक व्यावहारिक समस्या है जिसमें आप वास्तव में नहीं जानते कि आपके द्वारा चुने गए मनमानी नाम का कोई ब्राउज़र नहीं है जिसका आपने अभी तक परीक्षण नहीं किया है, या ब्राउज़र के भविष्य के संस्करण में या मानक जो अभी तक अस्तित्व में नहीं है। एक संपत्ति element.sausage= true जोड़ें, और आप यह सुनिश्चित नहीं कर सकते कि अंतरिक्ष और समय में कहीं भी कोई भी ब्राउज़र उस रोमांचक क्रोम सॉसेज को ब्राउज़र क्रैश सुविधा बनाने के लिए सिग्नल के रूप में उपयोग नहीं करेगा। तो यदि आप एक मनमानी संपत्ति जोड़ते हैं, तो इसे एक असंभव नाम देना सुनिश्चित करें, उदाहरण के लिए element._mylibraryname_sausage= true । यह अन्य स्क्रिप्ट घटकों के साथ नेमस्पेस विवादों को रोकने में भी मदद करता है जो मनमाने ढंग से गुण जोड़ सकते हैं।

आईई में एक और समस्या है जिसमें आपके द्वारा जोड़े गए गुणों को गलत रूप से गुणों के रूप में माना जाता है। यदि आप आंतरिक HTML के साथ तत्व को क्रमबद्ध करते हैं तो आपको आउटपुट में एक अप्रत्याशित विशेषता मिलेगी, उदाहरण के लिए। <p _mylibraryname_sausage="true"> । यदि आप उस HTML स्ट्रिंग को किसी अन्य तत्व को असाइन करते हैं, तो आपको नए तत्व में एक संपत्ति मिल जाएगी, संभावित रूप से आपकी स्क्रिप्ट को भ्रमित कर रही है।

(ध्यान दें कि यह केवल उन गुणों के लिए होता है जिनके मूल्य सरल प्रकार होते हैं; ऑब्जेक्ट्स, सरणी और फ़ंक्शंस धारावाहिक HTML में दिखाई नहीं देते हैं। मेरी इच्छा है कि jQuery इस बारे में जानता है, क्योंकि data विधि को लागू करने के लिए यह जिस तरह से काम करता है वह बिल्कुल भयानक है, परिणाम बग में, और कई सरल डीओएम संचालन धीमा कर देता है।)

मैं इसके लिए एक सीधा जवाब ढूंढ रहा हूं (मैं बहुत सारी संभावनाओं के बारे में सोच सकता हूं, लेकिन मैं सही कारण जानना चाहता हूं):

jQuery डीओएम एलिमेंट ऑब्जेक्ट्स के साथ डेटा को जोड़ने के लिए .data () विधि प्रदान करता है। यह क्या आवश्यक बनाता है? क्या डोम एलिमेंट ऑब्जेक्ट्स को सीधे गुण (या विधियों) जोड़ने में कोई समस्या है? यह क्या है?




इसे इस तथ्य से करना है कि आईई में डीओएम जेस्क्रिप्ट द्वारा प्रबंधित नहीं है, जो इसे एक्सेस करने के लिए पूरी तरह से अलग वातावरण बनाता है। इससे स्मृति रिसाव http://www.crockford.com/javascript/memory/leak.html ओर जाता है। एक और कारण यह है कि, जब लोग नोड्स की प्रतिलिपि बनाने के लिए आंतरिक HTML का उपयोग करते हैं, तो उन सभी अतिरिक्त गुणों को स्थानांतरित नहीं किया जाता है।




Related