2010-11-18 14 views
25

मैं एक ऐसे प्रोजेक्ट पर काम कर रहा हूं जहां उनका ढांचा jQuery 1.3.2 और jQueryUI 1.7.2 का उपयोग करता है।jQuery और jQueryUI के विभिन्न संस्करणों का उपयोग

ढांचे में संस्करणों को अपग्रेड करना एक संभावना नहीं है इसलिए मैं समानांतर में jQuery 1.4.4 और jQueryUI 1.8.5 चलाने के लिए चाहता था।

मैंने देखा है कि jQuery के विभिन्न संस्करणों तो जैसे समानांतर में इस्तेमाल किया जा सकता:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> 
    <script type="text/javascript"> 
     var j$132 = $.noConflict(true); 
    </script> 

    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js"></script> 
    <script type="text/javascript"> 
     var j$144 = $.noConflict(true); 
    </script> 

लेकिन यह भी निम्नलिखित के लिए सच पकड़ होगा:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> 
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js"></script> 
    <script type="text/javascript"> 
     var j$132 = $.noConflict(true); 
    </script> 

    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js"></script> 
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.5/jquery-ui.min.js"></script> 
    <script type="text/javascript"> 
     var j$144 = $.noConflict(true); 
    </script> 
+6

दूसरा कोड ब्लॉक वास्तव में सीडीएन स्रोतों के साथ काम करता है, हां, और इस तथ्य पर निर्भर करता है कि द्वितीय संस्करण को लोड करने से पहले jQuery का संदर्भ साफ़ कर दिया गया है। यह स्वीकार्य उत्तर के बराबर है। –

उत्तर

12

AFAIK, वहाँ कोई $.noConflict() बराबर है jQuery यूआई के लिए।

(function(jQuery) { 
    // ... the jQuery UI lib code for jQuery 1.3.2 
})(j$132); 

इस सुंदर ढंग से सर्वर की ओर से निर्माण स्क्रिप्ट का उपयोग कर लागू किया जा सकता: हालांकि, आप jQuery यूआई की एक स्थानीय प्रति पूरे जे एस आप विभिन्न पुस्तकालयों aliasing के लिए क्या उपयोग करने के लिए इसी तरह की एक चाल का उपयोग कर का उपयोग करें और लपेट कर सकते हैं या एक हैंडलर जो जेएस फाइलों परोसता है लेकिन उपरोक्त कोड के साथ सामग्री को लपेटता है।

इस दृष्टिकोण का परीक्षण नहीं किया है, इसलिए आपको फ़ंक्शन पैरामीटर के साथ चारों ओर झुकाव करना पड़ सकता है (हालांकि मुझे लगता है कि प्लगइन कोड के भीतर jQuery को संदर्भित करने के लिए यह jQuery का उपयोग करना सुरक्षित है)। जैसा कि मैंने ऊपर निर्दिष्ट किया है

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> 
<script type="text/javascript"> 
    var j$132 = $.noConflict(true); 
</script> 

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js"></script> 
<script type="text/javascript"> 
    var j$144 = $.noConflict(true); 
</script> 

... और फिर, अपने यूआई कोड में शामिल हैं:

जिस तरह से आप इस का उपयोग करें jQuery के दोनों संस्करणों की घोषणा है।

और नहीं, आप Google सीडीएन से यूआई जेएस फाइलों का संदर्भ देते समय ऐसा नहीं कर सकते हैं।

संपादित करें: प्रश्न में दूसरा कोड ब्लॉक वास्तव में इस उत्तर से बेहतर समाधान है, क्योंकि इसे मूल यूआई कोड को एक स्व-निष्पादन समारोह में लपेटने और विशिष्ट संस्करण को पार करने की आवश्यकता नहीं होती है। दोनों दृष्टिकोण पृष्ठ पर बिल्कुल उसी स्थिति में परिणाम देते हैं।

+3

यह पूरी तरह से रैपर के उद्देश्य को हरा देता है, जो 'jQuery.noConflict (true) 'पर कॉल से पहले' jQuery 'के संदर्भ को कैप्चर करना है। jQuery यूआई को बॉक्स के बाहर इसका समर्थन करने के लिए डिज़ाइन किया गया है। प्रश्न में प्रस्तावित कार्यान्वयन वास्तव में सही है और ठीक काम करता है। –

1

मुझे इस पृष्ठ पर मिला क्योंकि मुझे मूल प्रश्न में वर्णित एक ही समस्या है लेकिन दिया गया उत्तर पूरी तरह से इसे हल नहीं करता है (अब)।

मुझे उस पृष्ठ पर एक ऑटो सुझाव जोड़ने की आवश्यकता है जिसमें jquery का उपयोग करके बहुत सारे मौजूदा कोड हैं, नए jquery और jquery ui को अपडेट करने का कोई आसान तरीका नहीं था, इसलिए पुराने के बगल में नए संस्करण का उपयोग करने का प्रयास किया गया एक।

संपादन jQueryUI अंतिम पंक्ति इसके अलावा jQuery ui है jQuery संदर्भ का एक बहुत है कि आप के रूप में अच्छी तो मैं एक संपादक है कि रेगुलर एक्सप्रेशन के उपयोग की जगह ले सकता का इस्तेमाल किया और प्रतिस्थापित बदलने की जरूरत: \ bjQuery \ के साथ ख जे $ 182

पेज में एक मैं कहा:

<script src="http://code.jquery.com/jquery-1.8.2.js"></script> 
    <script type="text/javascript"> 
     var j$182 = $.noConflict(true); 
     </script> 
<script type="text/javascript" src="jqueryui1.9.0.js"></script> 

अब पेज और नए ऑटो पर दोनों मौजूदा स्क्रिप्ट का सुझाव देते हैं काम कर रहे हैं।

0

मुझे बस एक समाधान मिला और यह मेरे लिए काम करता है।

jQuery पुस्तकालय में, अंतिम पंक्ति प्रकार के बाद

var mySelector = $; 

दूसरे संस्करण को शामिल करें के बाद आप अपने पेज में इस में शामिल हैं।

अब, उन सभी स्क्रिप्ट्स में जिन्हें आप इस jquery संस्करण (यहां तक ​​कि jquery ui और अन्य पुस्तकालयों) के साथ भी उपयोग करना चाहते हैं, मेरे myeelector के साथ $ को प्रतिस्थापित करें। प्रतिस्थापन का उपयोग करें, कुछ जगहें होंगी, जैसे रेगेक्स मैच फ़ंक्शंस में जहां आप mySelector को $ $ में बदलना चाहते हैं। यह समस्या मुझे काफी समय तक परेशान कर रही थी। और यह अभी हल हो गया है।

संपादित: सुनिश्चित करें कि आप jQuery मूल स्क्रिप्ट के अंदर किसी भी $ को प्रतिस्थापित नहीं करते हैं।

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