2012-07-09 14 views
9

की Iife में समझ $ बनाम jQuery मैं अगर वहाँ के बीच कोई अंतर है समझने की कोशिश कर रहा हूँ। यह ठीक है? क्या यह कहीं भी उपयोग नहीं किया जाता है क्योंकि यह काम नहीं कर सकता है? यह काम करता है लेकिन शायद यह गैर मानक है? क्या कोई इसे समझ सकता है अगर यह एक त्रुटि है या यह ठीक है? धन्यवाद

+0

कृपया अर्धविराम ';' के साथ अपना बयान समाप्त करें। अन्यथा, आप परेशानी में भाग लेंगे: '(...) (...) (...) (...)'। –

+1

पहला कोड का वास्तविक बिंदु jQuery में [noConflict mode] (http://api.jquery.com/jQuery.noConflict/) में फ़ंक्शन के अंदर jQuery संदर्भित करने के लिए '$' का उपयोग करने में सक्षम होना है। दूसरा वैश्विक उम्मीदवार में '$' नामस्थान का उपयोग कर रहा है, तो दूसरा उम्मीद के रूप में काम नहीं करेगा। –

उत्तर

15

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

1

वहाँ है।
$ jQuery के लिए सिर्फ शॉर्टकट है। यह lib को परिभाषित नहीं करता है, इसलिए इसका उपयोग अन्य ढांचे द्वारा भी किया जा सकता है।
को ध्यान में यह मामला लें:

// remove the jQuery shortcut ($ === undefined) 
var j = jQuery.noConflict(); 
// redefine the dollar sign 
window.$ = function(){ 
    // some other plugin 
} 

// case A 
(function($){ 
    alert(jQuery === $);//true 
})(jQuery) 

// case B 
(function($){ 
    alert(jQuery === $);//false 
})($) 
1

आपका दूसरे उदाहरण अनावश्यक है। आप उपयोग कर $ तो $ पहले से ही jQuery है jQuery पारित कर सकते हैं, तो यानी आप सिर्फ किया जा सकता था लिखा है:

(function(){ 
    $('#selectme'); 
})(); 

पहला उदाहरण है, केवल सार्थक आप noConflict मोड में jQuery उपयोग करना चाहते हैं है, लेकिन अभी भी $ करने के लिए उपयोग कोड के चयन टुकड़ों में संदर्भ jQuery। अन्यथा, आपको तकनीकी रूप से बंद होने की भी आवश्यकता नहीं है (हालांकि कई अन्य कारणों से बंद होने का अच्छा अभ्यास है)।

+0

उदाहरण अनावश्यक नहीं है। ऐसे कुछ मामले हो सकते हैं जहां आपको वैश्विक दायरे पर भरोसा नहीं करना चाहिए और वांछित चर को आपके फ़ंक्शन स्कोप में रखना बेहतर होगा। इस उदाहरण पर विचार करें: '(फ़ंक्शन() {setTimeout (फ़ंक्शन() {अलर्ट ($ === jQuery);}, 1000);})(); $ = 13;' और फिर '(फ़ंक्शन ($) {setTimeout (function() {चेतावनी ($ === jQuery);}, 1000);}) ($); $ = 13; '। आप देख सकते हैं कि दूसरा उदाहरण वांछित परिणाम –

6

कई जावास्क्रिप्ट पुस्तकालय एक फ़ंक्शन या चर नाम के रूप में $ का उपयोग करते हैं, जैसे कि jQuery करता है। JQuery के मामले में, $ jQuery के लिए सिर्फ एक उपनाम है, इसलिए सभी कार्यक्षमता $ का उपयोग किए बिना उपलब्ध है।

http://api.jquery.com/jQuery.noConflict/

में "नो-confict" मोड,: हम jQuery के साथ-साथ एक और JavaScript लाइब्रेरी का उपयोग करने की जरूरत है, हम $ के नियंत्रण वापस अन्य पुस्तकालय के लिए $ .noConflict() के लिए एक कॉल के साथ लौट सकते हैं $ शॉर्टकट उपलब्ध नहीं है और लंबे jQuery का उपयोग किया जाता है। उदाहरण के लिए:

$(document).ready(function(){ 
    $(#somefunction) ... 
}); 

बन जाता है:

jQuery(document).ready(function(){ 
    jQuery(#somefunction) ... 
}); 

आदेश $ के डिफ़ॉल्ट jQuery शॉर्टकट का उपयोग करने, आप अपने कोड के संबंध में निम्न आवरण का उपयोग कर सकते हैं:

jQuery(document).ready(function($) { 
    // $() will work as an alias for jQuery() inside of this function 
}); 

कि आवरण होगा पेज लोड होने पर आपका कोड निष्पादित होने का कारण बनता है, और $ jQuery को कॉल करने के लिए काम करेगा।

(function($) { 
    // $() will work as an alias for jQuery() inside of this function 
})(jQuery); 

अच्छा पढ़ा:http://codex.wordpress.org/Function_Reference/wp_enqueue_script#jQuery_noConflict_wrappers

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

What does $ mean in jQuery?

यह आपके प्यास बुझाने के लिए मदद करनी चाहिए :) उम्मीद है कि यह मदद करता है!

+0

देता है आपको 'दस्तावेज़' और' .ready() 'का उपयोग करने की आवश्यकता नहीं है' मेरा पसंदीदा है: 'jQuery ($ => {/ * कोड * /})' – Endless

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