2012-03-21 13 views
7

निम्नलिखित कार्यों के लिए:सेट document.getElementById चर

$ = document.form; 
    x = $.name.value; 

यह नहीं करता है:

$ = document.getElementById; 
    x = $("id").value; 

क्यों यह काम नहीं करता है या कैसे तो यह सुनिश्चित करने के लिए पर कोई भी विचार?

+0

इस पोस्ट/उत्तर में लाइनों के बीच अपने जवाब खोज सकते हैं: http://stackoverflow.com/a/9612657/77047 –

+0

मुझे यकीन है कि नहीं कर रहा हूँ यह एक ई है xact डुप्लिकेट प्रति से, लेकिन यह उसी ग्राउंड को कवर करता है जैसे http://stackoverflow.com/questions/6398787/javascript-shorthand-for-getelementbyid – lonesomeday

उत्तर

0

यदि आप ऐसा कुछ हासिल करने की कोशिश कर रहे हैं तो मैं jQuery का उपयोग करने का सुझाव दूंगा। आईडी द्वारा तत्व प्राप्त करने की तुलना में उनका $ नोटेशन अधिक शक्तिशाली है।

इसके अलावा, यदि आप किसी भी प्लेटफॉर्म का उपयोग कर रहे हैं जो पहले से ही एक चर के रूप में $ एएसपी नेट का उपयोग करता है तो आपको अप्रत्याशित परिणाम हो सकता है।

10

this का मान इस बात पर निर्भर करता है कि आप फ़ंक्शन को कैसे कॉल करते हैं।

जब आप document.getElementById पर कॉल करते हैं तो getElementByIdthis === document हो जाता है। जब आप getElementById को एक अलग चर पर कॉपी करते हैं और फिर इसे $ के रूप में कॉल करें तो this === window (क्योंकि window डिफ़ॉल्ट चर है)।

इसके बाद यह दस्तावेज़ ऑब्जेक्ट की बजाय विंडो ऑब्जेक्ट में आईडी को देखने का कारण बनता है, और यह बहुत ही विफल रहता है क्योंकि विंडोज दस्तावेज़ नहीं हैं और समान तरीके नहीं हैं।

आपको कॉल में document को बनाए रखने की आवश्यकता है। आप इसके लिए एक रैपर फ़ंक्शंस का उपयोग कर सकते हैं उदा।

function $ (id) { return document.getElementById(id); } 

... लेकिन कृपया $ का उपयोग न करें। यह एक भयानक नाम है। इसका कोई मतलब नहीं है और यह उन लोगों को भ्रमित करेगा जो इसे देखते हैं और सोचते हैं "आह! मुझे jQuery पता है!" या "आह! मुझे प्रोटोटाइप पता है" या आदि आदि

+1

$ का "आईडी चयनकर्ता विधि" का अर्थ है, इसलिए सब कुछ ठीक है। – Bergi

+1

@ बर्गि - नहीं, ऐसा नहीं है। उदाहरण के लिए, jQuery में, इसका अर्थ है "सीएसएस चयनकर्ता से तत्वों का संग्रह प्राप्त करें ** या ** एचटीएमएल ** के एक खंड से नोड्स का संग्रह उत्पन्न करें या ** DOMReady ईवेंट आग लगने पर इस फ़ंक्शन को चलाएं"। – Quentin

+1

[इन टिप्पणियों] पर एक नज़र डालें (http://stackoverflow.com/a/6398800/1048572)। साथ ही, jQuery एक बहुत अच्छा उदाहरण है कि आपको सुपर-डुपर संग्रह चयनकर्ता फ़ंक्शंस को अधिभार क्यों नहीं करना चाहिए। – Bergi

1

getElementByIdHTMLDocument प्रोटोटाइप का एक तरीका है (जिसमें से document एक उदाहरण है)। इसलिए, वैश्विक संदर्भ में फ़ंक्शन को कॉल करने से आपको निश्चित रूप से "गलत यह त्रुटि" या कुछ मिल जाएगा।

आप को समझने के लिए बेहतर उपयोग कर सकते हैं

var $ = document.getElementById.bind(document); 

लेकिन

function $(id) { return document.getElementById(id); } 

भी ठीक है और हो सकता है।

1

आप क्या हासिल करना चाहते पता नहीं है, लेकिन इस वजह getElementById इस

$ = document.getElementById; 
x = $.call(document, "id").value; 

काम करता है केवल जब यह गुंजाइश यह जरूरत की वजह से document की एक समारोह है की तरह काम किया जा सकता है।

लेकिन मैं @ क्वांटिन के उत्तर की सिफारिश करता हूं।

+0

डेमो: http://jsfiddle.net/5V5w3/ – Zeta

4

संदर्भ वस्तु अलग है।आप इस संदर्भ वस्तु को बदल रहे हैं जब आप एक समारोह के संदर्भ मिलता है:

var john = { 
    name : "john", 
    hello : function() { return "hello, I'm " + this.name } 
} 

var peter = { name : "peter" }; 

peter.hello = john.hello; 

peter.hello() // "hello, I'm peter" 

आप एक संदर्भ समारोह एक विशिष्ट संदर्भ वस्तु के लिए बाध्य चाहते हैं, आप bind उपयोग करने के लिए:

peter.hello = john.hello.bind(john); 

peter.hello(); // "hello, I'm john" 

तो आपके मामले में यह हो जाएगा:

var $ = document.getElementById.bind(document);