2010-02-06 12 views
60

Passiamo da MooTools a jQuery al lavoro. Ho un collega che mi ha detto di non usare mai $ come prefisso quando si utilizza un metodo jQuery (se l'ho capito correttamente). Ha detto che, invece, il modo più appropriato o più sicuro (non l'ho seguito davvero) è stato quello di utilizzare jQuery..

Quindi, al posto di $.plugin(), ad esempio, è necessario utilizzare jQuery.plugin().

Perché dovrebbe essere così? Che distinzione sta facendo con $/jQuery? Devo dimenticare il simbolo del dollaro come mio accessor? Solo in determinate circostanze?

+0

possibile duplicato di [jQuery e MooTools Conflict] (http://stackoverflow.com/questions/2810399/jquery-and-mootools-conflict) –

+0

possibile duplicato di [Qual è la differenza tra queste funzioni jQuery ready?] (http://stackoverflow.com/questions/2662778/what-is-the-difference-between-these-jquery-ready-functions) –

risposta

74

Perché dovrebbe essere? La sua distinzione $/jQuery è corretta?

Perché quasi ogni libreria JavaScript definisce una funzione chiamata $. Quando ci sono molte librerie in un documento, possono apparire dei conflitti. Se sei sicuro che jQuery sia e sarà sempre l'unico script a definire tale funzione, non avrei nulla contro l'utilizzo di $.

jQuery definisce una soluzione per risolvere i conflitti: jQuery.noConflict. Usando questa funzione puoi definire il tuo nome, in base al quale jQuery sarà accessibile, ad es.

var $jq = jQuery.noConflict(true); 

chiamata a questa funzione si tradurrà nel ripristinare i valori precedenti per $ e le variabili di jQuery, quando esisteva prima di inizializzare jQuery. Non ricordo se altre librerie provano a risolvere conflitti di nomi.

Se si desidera utilizzare $ invece di jQuery per tutto il tempo è possibile eseguire il codice in un ambito privato separato che contiene la definizione di $ utilizzando una funzione di auto-richiamo.

(function($){ 
    // your code goes here 
    $("body").append("<p>Hello World!</p>"); 
})(jQuery); // or even jQuery.noConflict() 
+10

Solo per enigmatica sulla terminologia: ciò che hai presentato non è una chiusura, ma solo un sé -invocare la funzione. Una chiusura è quando si definisce una funzione all'interno di un'altra funzione e la si restituisce. –

+0

Il mio errore. Non so cosa stavo pensando mentre scrivevo la mia risposta. Cambiato il testo – Rafael

+2

+1 per l'IIFE (espressione di funzione immediatamente invocata). IMO è preferibile usare 'noConflict' poiché l'ambito è chiaramente definito. – ach

10

$ è alias per jQuery e potrebbe, in teoria, essere alias a qualcos'altro in un'altra libreria o script incluso che può portare a confusione o peggio. Se usi solo jquery, usare $ dovrebbe andare bene.

3

È per evitare conflitti con altre librerie come Prototype che utilizza lo stesso $.

Preferisco $, e non ci sono problemi nell'utilizzarlo se si utilizza solo Jquery.

3

In aggiunta alle altre risposte intorno ai conflitti con altre librerie, un nome di variabile dovrebbe sempre descrivere la variabile. jQuery è un nome molto più descrittivo per una variabile rispetto a $.