Come posso eseguire diverse versioni di jQuery sulla stessa pagina?

La mia azienda ha acquistato un prodotto che esegue il rendering di un controllo ASP.NET nella pagina. Questo controllo utilizza jQuery 1.2.3 e aggiunge un tag script alla pagina per fare riferimento a esso. Gli sviluppatori del controllo non supporteranno l’uso del controllo se modificato in alcun modo (inclusa la modifica per fare riferimento a una versione diversa di jQuery).

Sto per iniziare lo sviluppo del mio controllo e vorrei utilizzare le funzionalità e i miglioramenti di velocità di jQuery 1.3. Entrambi questi controlli dovranno esistere sulla stessa pagina.

Come posso consentire al controllo acquistato di utilizzare jQuery 1.2.3 e un nuovo sviluppo personalizzato per utilizzare jQuery 1.3? Anche per curiosità, cosa succede se dovessimo utilizzare un controllo aggiuntivo che necessitasse di fare riferimento a un’altra versione di jQuery?

Puoi ottenere questo risultato eseguendo la tua versione di jQuery in modalità no-conflict . La modalità “No conflict” è la soluzione tipica per far funzionare jQuery su una pagina con altri framework come il prototipo , e può anche essere usata qui in quanto essenzialmente namespace ogni versione di jQuery che carichi.

    

Questo cambiamento significherà che qualsiasi jQuery che vuoi usare dovrà essere chiamato usando jq13 piuttosto che $ , ad es.

 jq13("#id").hide(); 

Non è una situazione ideale avere le due versioni in esecuzione sulla stessa pagina, ma se non hai alternative, il metodo sopra dovrebbe consentire di utilizzare due versioni diverse contemporaneamente.

Anche per curiosità, cosa succede se dovessimo utilizzare un controllo aggiuntivo che necessitasse di fare riferimento a un’altra versione di jQuery?

Se avevi bisogno di aggiungere un’altra versione di jQuery, potresti espandere su quanto sopra:

       

Le variabili jq13 e jq131 dovrebbero essere utilizzate per le funzionalità specifiche della versione richieste.

È importante che il jQuery utilizzato dallo sviluppatore originale sia stato caricato per ultimo – lo sviluppatore originale probabilmente ha scritto il suo codice ipotizzando che $() utilizzasse la sua versione jQuery. Se caricate un’altra versione dopo la loro, il $ verrà “afferrato” dall’ultima versione caricata, il che significherebbe che il codice dello sviluppatore originale è in esecuzione sull’ultima versione della libreria, rendendo i noConflicts alquanto ridondanti!

Come detto ConroyP puoi farlo con jQuery.noConflict ma non dimenticare var quando dichiari variabili. Come questo.

     

Puoi connettere tutti $ ‘s a jq13 aggiungendo (jq13) dopo la funzione }) . come questo

 (function($) { ... })(jq13); 

Sembra che l’ordine non contenga … ad esempio: http://gist.github.com/136686 . L’output della console è in alto e tutte le versioni sembrano essere nei posti giusti.

rendi falso il lavoro

 var jq16 = $.noConflict(false); 

Nella seconda versione dichiarare una variabile come $ .noConflict (true). E usa la variabile dichiarata al posto di $ usata nel codice jquery. Si prega di controllare il seguente codice: Questo codice viene utilizzato dopo la dichiarazione delle seconde versioni di jquery: