2012-04-05 10 views
5

Quindi sto lavorando a un sito Web che utilizza sia jQuery sia prototype.js, anche se in conflitto.

Ho ricercato un bel po 'e ha scoperto che l'unico modo le persone risolvere questo problema è quello di utilizzare

<script> 
jQuery.noConflict(); 

// Use jQuery via jQuery(...) 
jQuery(document).ready(function(){ 
    jQuery(\"div\").hide(); 
}); 

// Use Prototype with $(...), etc. 
$('someid').hide(); 

Comunque non voglio cambiare $ a jQuery come questo significa che Dovrei modificare un bel po 'di codice pre-scritto. C'è un modo per fermarli in conflitto e lasciare jQuery come $?

+0

State chiedendo se si potrebbe avere, nello stesso ambito, $ significare due cose diverse? – Iznogood

+0

Chiede se c'è una versione prototipo di 'noConflict()'. –

+0

possibile duplicato di [jQuery & Prototype Conflict] (http://stackoverflow.com/questions/134572/jquery-prototype-conflict) – jrummell

risposta

9

Invece di utilizzare documenti pronti è possibile creare una chiusura (alla fine del body) come:

(function($) { 
    //jQuery stuff 
    $('.elem') // $ refers to jQuery 
})(jQuery); 

Se ho capito la tua domanda correttamente

+0

Oh, qualcuno ha già postato la stessa risposta. – rgin

+0

Deciso di andare con questo, per quanto fastidiosamente prototype.js sta mostrando un errore ora .. –

+0

Oh ci andiamo, riparato, grazie per l'aiuto di tutti! –

6

No, non che io abbia sentito parlare. Per ridurre al minimo il dolore conversione di codice si potrebbe fare qualcosa di simile a questo, però:

var j$ = jQuery.noConflict(); 

Si potrebbe quindi sostituire jQuery $ chiamate con j$. Probabilmente potresti anche usare una semplice ricerca/sostituzione chiamata.

+0

Penso che questo abbia causato un problema alle variabili globali e locali così deciso di andare con uno sopra, grazie! –

2
(function($){ 
    // $('jquery here') 
})(jQuery); 

Tutto il codice jQuery all'interno della funzione possibile utilizzare $.

0

C'è un modo semplice per farlo avvolgendo il codice già scritto in una funzione e passare jQuery in esso. In questo modo è possibile mantenere il vostro codice giá scritto e utilizzare jQuery come identificatore unico per il nuovo:

(my_old_stuff = function($){ 
    $.my_existing_function(){ 
     alert('i allready exist'); 
    }; 
)(jQuery); 

jQuery.my_existing_function(); 

che dovrebbe funzionare.

D'altra parte: la sostituzione di $ con jQuery non sembra essere molto più di una operazione per la sostituzione automatica.

0

Anche se è un post piuttosto vecchio ma ho avuto esattamente lo stesso problema. Ci sono molte opzioni disponibili per gestirlo. Non vorrei toccare il codice pre-scritto e lasciare che il prototipo js usi $.

Dal jQuery documentation

<!-- Loading jQuery before other libraries. --> 
<script src="jquery.js"></script> 
<script src="prototype.js"></script> 
<script> 

// Use full jQuery function name to reference jQuery. 
jQuery(document).ready(function() { 
    jQuery("div").hide(); 
}); 

// Use the $ variable as defined in prototype.js 
window.onload = function() { 
    var mainDiv = $("main"); 
}; 

</script> 

Ecco tutte le opzioni disponibili.

https://learn.jquery.com/using-jquery-core/avoid-conflicts-other-libraries/

Problemi correlati