2009-07-21 8 views
7

Mi chiedevo perché in così tanti plugin jQuery $ (questo) è impostato per indicare $ this, ecco un esempio, se ho i seguenti due plugin inclusi una pagina:

(function($) { 
    jQuery.fn.pluginOne = function() { 
     return this.each(function() { 
     $this = $(this); <-- 
     alert($this); 
     }); 
    }; 
})(jQuery) 

(function($) { 
    jQuery.fn.pluginTwo = function() { 
     return this.each(function() { 
     $this = $(this); <-- 
     alert($this); 
     }); 
    }; 
})(jQuery) 

quando chiamo entrambi i plug-in pronto dom:

$(document).ready({ 
    $('.myClass').pluginOne(); 
    $('.myOtherClass').pluginTwo(); 
}); 

il primo plugin otterrà $ questo dal secondo plug-in ... mentre io punto $ (this) ad un var locale:

(function($) { 
    jQuery.fn.pluginTwo = function() { 
     return this.each(function() { 
     var trigger = $(this); <-- 
     alert(trigger); 
     }); 
    }; 
})(jQuery) 

dovrebbe funzionare, naturalmente ...

Quindi la mia domanda è ... quando dovrei usare $ questo?

Grazie

+0

Giusto per chiarire ... Nell'esempio di cui sopra $ (' myOtherClass.) PluginTwo().; restituirà il primo elemento dell'array seguente: $ ('. myClass') –

risposta

12

$ questo è un popolo standard di utilizzare per memorizzare nella cache l'attuale oggetto jQuery $ (this) in una variabile.

Puoi chiamarlo come desideri, ad alcune persone piace chiamarlo $ self.

es

var $self = $(this) 

E 'solo aiuta quando si sta guardando il codice di riconoscere che si tratta di un oggetto jQuery piuttosto che un oggetto dom normale.

Si comporta meglio poiché si crea solo un'istanza della variabile jQuery.

+0

Il punto sarebbe che dovrebbe essere 'var $ this' nell'esempio sopra, quindi? – ijw

+1

$ qualunque sia il punto – redsquare

+0

... della tua risposta, sì. Mi sembra la domanda originale relativa a $ this scopeing e, in effetti, che il poster sia corretto (che una variabile dovrebbe essere locale) e che abbia due plugin che (a) usano $ come convenzione, non perché ha un significato intrinseco e (b) non lo fa correttamente. – ijw

2

se si esegue un certo numero di diversi comandi con un elemento avvolto in un oggetto jQuery, allora è più performante per ottenere l'elemento (come un insieme avvolto) solo una volta e memorizzare che in una variabile locale

var $this = $(this); 
// then use $this in your function. 

Nota l'uso di var localmente ambito $this

9

$ è un personaggio legittima per i nomi di variabili e funzioni in Javascript. Ciò potrebbe essere fonte di confusione se provieni da PHP dove viene utilizzato lo $ per indicare solo una variabile (mi ci è voluto un po 'per rendermene conto).

  • In jQuery, $ è un alias per la funzione jQuery, che è la funzione principale che gestisce la selezione DOM. $("#header ul.menu") corrisponde a jQuery("#header ul.menu"). $ è semplicemente usato per brevità.

  • this è un termine speciale in javascript (non jQ) che indica l'elemento corrente (nelle forme che potresti vedere this.submit() per esempio).

  • $(this) significa "chiama la funzione jQuery con Javascript this".

  • $this è semplicemente una variabile, poiché $ è un carattere valido. È possibile impostare $this per qualsiasi valore che ti piace ed è completamente estraneo a this di Javascript.In generale, suggerirei di NON usare $ per i nomi delle variabili per evitare confusione con la funzione jQuery. Tuttavia, potrebbe essere utile usare $var per indicare gli oggetti jQuery in contrasto con le normali variabili Javascript.

+1

In realtà, io suggerisco di usare $ come primo carattere di una variabile quando si usa jQuery. Lo uso sempre per indicare il fatto che una certa variabile è un oggetto jQuery, come $ this = $ (this). – EndangeredMassa

+0

Buon punto, EM. Ho modificato la mia risposta. – DisgruntledGoat

+0

@EM Questa è una * bella * idea, penso che potrei iniziare su quello. – ijw

Problemi correlati