दिलचस्प पोस्ट
Javafx में प्रगति बार पर ब्लॉक एक्शन ब्लॉक अद्यतन नहीं करता है जावास्क्रिप्ट के साथ नई गुप्त विंडो कैसे खोलें? (गूगल क्रोम) ksoap2 – android का उपयोग कर साबुन हेडर कैसे सेट करें लिनक्स और ओएस एक्स पर स्थानीय मशीन का प्राथमिक आईपी पता कैसे प्राप्त करें? पायथन – मुद्रित आइटम हटाएं और बदलें क्या मैं == 0 और 0 == में अंतर है I? java.rmi.ConnectException: कनेक्शन होस्ट करने से इनकार कर दिया गया: 127.0.1.1; जीडीबी में सी ++ वेक्टर के तत्वों को कैसे मुद्रित कर सकता हूं? क्या मैलोक लिज़क्स (और अन्य प्लेटफार्मों) पर आवंटन के लिए बैकिंग पृष्ठ बनाते हैं? दो (या अधिक) वैक्टर से सभी तत्वों का अद्वितीय संयोजन ऑटोवॉलेउट में सेंविंग सबव्यूज़ एक्स फेंकता "बाधा के लिए तैयार नहीं" रिलेटिव लेआउट, एंड्रॉइड में परिपत्र निर्भरता मौजूद नहीं हो सकती? आर / चमकदार के साथ इनपुट तत्वों की गतिशील संख्या बनाएं बिना प्रतीक्षा के एसिंक का उपयोग करना थ्रेड कैसे शुरू और रोकें?

हम जावास्क्रिप्ट में पहचानकर्ता के रूप में तत्व आईडी का उपयोग क्यों नहीं करते हैं?

मैं बस लिखने के द्वारा id="myDiv" साथ किसी तत्व को एक्सेस करने की अनुमति देने के साथ काम करने के लिए आने वाले सभी ब्राउज़रों:

 myDiv 

यहां देखें: http://jsfiddle.net/L91q54Lt/

वैसे भी, यह विधि काफी खराब प्रतीत हो रही है, और वास्तव में, जो सूत्र मेरे पास आते हैं, वे इसका उल्लेख भी नहीं देते हैं और इसके बजाय मानते हैं कि एक

 document.getElementById("myDiv") 

या हो सकता है

 document.querySelector("#myDiv") 

एक DOM तत्व तक पहुंचने के लिए, जब इसकी पहचान अग्रिम में भी हो (यानी रनटाइम पर गणना नहीं की जाती है)। मैं कह सकता हूं कि बाद के दृष्टिकोणों को कोड को सुरक्षित रखने का लाभ होता है अगर किसी व्यक्ति ने मेरे myDiv को फिर से परिभाषित करने का प्रयास किया है, तो एक व्यापक दायरे में (हालांकि इस तरह का एक शानदार विचार नहीं है …), इसे कुछ अलग मूल्य के साथ ओवरराइट किया जाता है और बिना देखे जाता है संघर्ष।

लेकिन अन्य यह है कि? क्या कोड डिजाइन के अलावा अन्य छोटे आकार का उपयोग करने में कोई चिंता है या मैं यहाँ और क्या याद रख रहा हूं?

Solutions Collecting From Web of "हम जावास्क्रिप्ट में पहचानकर्ता के रूप में तत्व आईडी का उपयोग क्यों नहीं करते हैं?"

वैसे भी, यह विधि काफी खराब प्रतीत हो रही है, और वास्तव में, जो सूत्र मेरे पास आते हैं, वे इसका उल्लेख भी नहीं देते […]

रिलायंस पर अलग-अलग घोषित ग्लोबल वैरिएबल को एक तरफ, दस्तावेज़ीकरण की कमी इसका एक अच्छा कारण नहीं है।

वैश्विक वैरिएबल में id वैल्यू के स्पष्ट प्रोत्साहन मानकों के अनुरूप नहीं हैं ( आईडी विशेषता के लिए HTML5 युक्ति इसका उल्लेख नहीं करता है) और, इसलिए आपको यह नहीं मानना ​​चाहिए कि भविष्य के ब्राउज़र इसे लागू करेंगे।

संपादित करें: यह पता चला है कि यह व्यवहार मानकों का अनुपालन है – HTML5 में, window "नामांकित तत्वों" को संपत्ति का उपयोग करना चाहिए:

उपर्युक्त एल्गोरिथ्म के प्रयोजनों के लिए, नाम नाम वाले नामित ऑब्जेक्ट, वे हैं जो या तो हैं:

  • सक्रिय दस्तावेज़ का बच्चा ब्राउज़िंग संदर्भ जिसके नाम का नाम है ,
  • एक, एपलेट, क्षेत्र, एम्बेड, फॉर्म, फ़्रेमसेट, आईएमजी, या ऑब्जेक्ट तत्व जिनके पास नाम सामग्री विशेषता है जिसका मूल्य नाम है , या
  • एचटीएमएल तत्व जिनके पास आईडी सामग्री विशेषता है जिसका मूल्य नाम है

स्रोत: एचटीएमएल 5 स्पेक, 'विंडो ऑब्जेक्ट पर नाम की पहुँच' , जोर खान

इस पर आधारित, मानक अनुपालन इस पैटर्न से बचने के लिए एक कारण नहीं है। हालांकि, यह स्वयं स्वयं इसके उपयोग के बारे में सलाह देता है:

एक सामान्य नियम के रूप में, इस पर निर्भर होने से भंगुर कोड हो जाएगा इस एपीआई के मानचित्रण को समाप्त करने वाली कौन सी आईडी समय के साथ भिन्न हो सकती हैं, क्योंकि वेब प्लेटफ़ॉर्म में नई फीचर जोड़े जाते हैं, उदाहरण के लिए इस के बजाय, document.getElementById() या document.querySelector()

महान सवाल जैसा कि आइंस्टीन ने शायद यह नहीं कहा था, चीजें यथासंभव सरल होनी चाहिए, और कोई आसान नहीं।

बाद के दृष्टिकोणों को कोड को सुरक्षित रखने का फायदा होता है अगर कोई व्यक्ति किसी अज्ञात तरीके से अपने डिवाइव को फिर से परिभाषित करने का प्रयास करता है (हालांकि इस तरह के एक शानदार विचार नहीं है …), इसे कुछ अलग मूल्य के साथ ओवरराइट किया जाता है और टकराव के बिना देखता रहता है

यह मुख्य कारण है कि यह एक बुरा विचार है, और यह काफी पर्याप्त है वैश्विक चर पर भरोसा करने के लिए सुरक्षित नहीं हैं। उन्हें किसी भी समय ओवरराइट किया जा सकता है, पृष्ठ पर चलने वाली किसी भी स्क्रिप्ट द्वारा।

इसके अलावा, केवल myDiv में टाइप करना document.getElementById() का एक "संक्षिप्त रूप" नहीं है। myDiv document.getElementById() यह एक वैश्विक चर के लिए एक संदर्भ है document.getElementById() अस्तित्व में नहीं है, तो document.getElementById() खुशी से वापस लौटाएगा, जबकि एक गैर-मौजूद वैश्विक वैरिएबल का उपयोग करने का प्रयास करने से कोई संदर्भ त्रुटि निकल जाएगी, इसलिए आपको अपने संदर्भों को वैश्विक रूप से एक प्रयास / पकड़ने में लपेटने की आवश्यकता होगी ब्लॉक को सुरक्षित रखें

यह एक कारण है कि jQuery बहुत लोकप्रिय है: यदि आप $("#myDiv").remove() , तो $("#myDiv").remove() , और मेरे myDiv आईडी के साथ कोई तत्व नहीं है, कोई त्रुटि नहीं फेंक दी जाएगी – कोड चुपचाप कुछ नहीं करेगा, जो अक्सर वही होता है जिसे आप चाहते हैं जब डोम हेरफेर करना होता है

कुछ कारण हैं:

आप अपने कोड और आपके मार्कअप को युग्मित नहीं करना चाहते हैं

एक विशिष्ट कॉल का उपयोग करके एक div का उपयोग करके, आपको भ्रष्ट होने वाले वैश्विक स्थान के बारे में चिंता करने की ज़रूरत नहीं है। एक लाइब्रेरी जोड़ें, जो वैश्विक अंतरिक्ष में मेरी myDiv घोषित करती है और आप दर्द की दुनिया में हैं जो ठीक करने में मुश्किल होगी।

आप तत्वों को आईडी द्वारा एक्सेस कर सकते हैं, जो DOM का हिस्सा नहीं हैं

वे एक टुकड़ा, एक फ्रेम या एक तत्व हो सकते हैं जो अलग हो गए हैं और अभी तक DOM को पुन: संलग्न नहीं किया गया है।

संपादित करें: ID द्वारा एक गैर-अनुलग्न तत्वों तक पहुंचने का उदाहरण

 var frag = document.createDocumentFragment(); var span = document.createElement("span"); span.id = "span-test"; frag.appendChild(span); var span2 = frag.getElementById("span-test"); alert(span === span2);