2009-07-21 12 views
7

मैं सोच रहा था कि क्यों इतने सारे jQuery प्लगइन्स $ (यह) इस पर इंगित करने के लिए सेट हैं, यहां एक उदाहरण है, यदि मेरे पास निम्नलिखित दो प्लगइन्स शामिल हैं एक पेज:

(function($) { 
    jQuery.fn.pluginOne = function() { 
     return this.each(function() { 
     $this = $(this); <-- 
     alert($this); 
     }); 
    }; 
})(jQuery) 

(function($) { 
    jQuery.fn.pluginTwo = function() { 
     return this.each(function() { 
     $this = $(this); <-- 
     alert($this); 
     }); 
    }; 
})(jQuery) 

जब मैं डोम तैयार पर दोनों प्लगइन्स फोन:

$(document).ready({ 
    $('.myClass').pluginOne(); 
    $('.myOtherClass').pluginTwo(); 
}); 

पहले प्लगइन दूसरी प्लगइन से इस $ मिल जाएगा ... जबकि यह मैं एक के लिए $ (this) बात स्थानीय var:

(function($) { 
    jQuery.fn.pluginTwo = function() { 
     return this.each(function() { 
     var trigger = $(this); <-- 
     alert(trigger); 
     }); 
    }; 
})(jQuery) 

सबकुछ उस पर काम करता है, निश्चित रूप से ...

तो मेरा सवाल है ... मुझे इसका उपयोग कब करना चाहिए?

धन्यवाद

+0

बस स्पष्ट करने के लिए ... ऊपर के उदाहरण $ ('myOtherClass।') में pluginTwo()।; निम्नलिखित सरणी का पहला तत्व वापस कर देगा: $ ('myClass') –

उत्तर

12

$ यह एक मानक लोग एक चर में वास्तविक jQuery वस्तु $ (this) कैश करने के लिए का उपयोग कर रहा है।

आप इसे अपनी इच्छानुसार कॉल कर सकते हैं, कुछ लोग इसे $ self के रूप में संदर्भित करना चाहते हैं।

, उदा,

var $self = $(this) 

यह सिर्फ मदद करता है जब आप पहचान करने के लिए है कि यह एक jQuery वस्तु के बजाय एक सामान्य डोम वस्तु है कोड को देख रहे हैं।

यह बेहतर प्रदर्शन करता है क्योंकि आप केवल jQuery चर का एक उदाहरण बनाते हैं।

+0

बिंदु यह होगा कि उपरोक्त उदाहरण में यह 'var $ this' होना चाहिए? – ijw

+1

$ जो भी आपके उत्तर का – redsquare

+0

है ... हाँ। मुझे इस स्कोपिंग से संबंधित मूल प्रश्न की तरह लगता है - और, वास्तव में, कि पोस्टर सही है (कि एक चर स्थानीय होना चाहिए) और केवल दो प्लगइन्स होते हैं जो (ए) इसे एक सम्मेलन के रूप में उपयोग करते हैं, क्योंकि नहीं इसका अंतर्निहित अर्थ है और (बी) इसे ठीक से गुंजाइश मत करो। – ijw

2

अगर आप किसी तत्व की jQuery वस्तु में लिपटे के साथ अलग अलग आदेशों में से एक नंबर प्रदर्शन कर रहे हैं, तो यह अधिक performant तत्व केवल एक बार प्राप्त करने के लिए (एक लिपटे सेट के रूप में) और स्टोर है कि एक स्थानीय चर में है

var $this = $(this); 
// then use $this in your function. 

नोट स्थानीय स्तर पर गुंजाइश $this

9

$ को var के उपयोग जावास्क्रिप्ट में चर और समारोह के नाम के लिए एक वैध चरित्र है। यदि आप PHP से आ रहे हैं तो यह भ्रमित हो सकता है जहां $ का उपयोग केवल एक चर को इंगित करने के लिए किया जाता है (मुझे एहसास करने में थोड़ी देर लग गई)।

  • jQuery में, $ समारोह jQuery, मुख्य कार्य है कि डोम चयन संभालती है, जिसके लिए एक उपनाम है। $("#header ul.menu")jQuery("#header ul.menu") जैसा ही है। $ का उपयोग केवल अल्पसंख्यक के लिए किया जाता है।

  • this जावास्क्रिप्ट (नहीं jQ) में एक विशेष अवधि के वर्तमान तत्व (रूपों में आप उदाहरण के लिए this.submit() देख सकते हैं) जिसका अर्थ है।

  • $(this) का अर्थ है "जावास्क्रिप्ट के this के साथ jQuery फ़ंक्शन को कॉल करें"।

  • $this बस एक चर है, क्योंकि $ एक वैध चरित्र है। आप $this को अपनी पसंद के किसी भी मूल्य पर सेट कर सकते हैं और यह जावास्क्रिप्ट के this से पूरी तरह से असंबंधित है।आम तौर पर मैं jQuery फ़ंक्शन के साथ भ्रम से बचने के लिए चर नामों के लिए $ का उपयोग नहीं करना चाहता हूं। हालांकि, सामान्य जावास्क्रिप्ट चर के विपरीत jQuery ऑब्जेक्ट्स को इंगित करने के लिए $var का उपयोग करना उपयोगी हो सकता है।

+1

मैं वास्तव में jQuery का उपयोग करते समय एक चर के पहले अक्षर के रूप में $ का उपयोग करने का सुझाव देता हूं। मैं इस तथ्य को इंगित करने के लिए हर समय इसका उपयोग करता हूं कि एक निश्चित चर एक jQuery वस्तु है, जैसे $ यह = $ (यह)। – EndangeredMassa

+0

अच्छा बिंदु, ईएम। मैंने अपना जवाब संपादित किया। – DisgruntledGoat

+0

@EM यह एक * ठीक * विचार है, मुझे लगता है कि मैं उस पर शुरू कर सकता हूं। – ijw

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