2010-01-15 16 views
18

Quali sono le cattive/peggiori pratiche JQuery che hai visto, scritto o cosa dovrebbe essere evitato?Jquery Cattive pratiche

+1

So che ho già commentato, ma questa domanda è un duplicato esatto: http://stackoverflow.com/questions/1229259/jquery-pitfalls-to-avoid –

risposta

30

Una cosa che dovresti evitare è usare i selettori "facili da usare" in ogni riga ancora una volta, perché l'implementazione JavaScript dei selettori non è che efficiente. Certo, i ragazzi di jQuery lo stanno ottimizzando, comunque penso che dovresti usarlo il meno possibile.

Quindi, questa è una cattiva pratica.

$("li ul span").show(); 
$("li ul span").toggleClass("bubu"); 

concatenamento è buono

$("li ul span").show().toggleClass("bubu"); 

E ricordare le cose in una variabile locale è anche non è male:

var allspans = $("li ul span"); 
allspans.show(); 
allspans.toggleClass("bubu"); 
+0

Sì, così tante persone fanno questo. È così male per le prestazioni. – jerone

+0

+1 per indicare il concatenamento e le variabili locali! –

2

ancora utilizzando il vecchio documento funzione di pronto:

$("document").ready(function(){ }); 

Invece di molto com mon:

$(function(){ }); 

Non è molto male, ma mostro che la gente non si alza con le nuove API.

+13

L'uso di '$ (document) .ready (...)' è spesso usato per rendere il codice esplicitamente chiaro. Ovviamente non è necessario, ma è difficilmente una cattiva pratica IMO. –

+1

Questo è quello che ho detto. :) – jerone

+1

puoi spiegare, perché dovrei farlo?Penso che la prima versione abbia più senso: stiamo allegando un gestore di eventi all'oggetto DOCUMENT. L'altro .. anche se forse funziona meglio .. non si spiega da solo. – naivists

17

Ci sono due che vedo un sacco:

primo, in un evento click, il id si accede in questo modo:

$("a").click(function(e){ 
    var id = $(this).attr('id'); 
}); 

che crea un nuovo jQuery oggetto intorno al DOM nodo, e chiama una funzione. Quanto segue è il modo corretto:

$("a").click(function(e){ 
    var id = this.id; 
}); 

Nota: Questo si vedrà anche $(this).attr('href'), ma che è corretto a causa del modo jQuery normalizza tutti i browser.

Il secondo sta passando nulla, tranne un nodo DOM nel parametro scope della chiamata jQuery:

$(".child", $(".parent")).doSomething(); 
// or 
$(".child", ".parent").doSomething(); 

non c'è guadagno di velocità a tutti in questo modo. Dove si fa vedere un aumento di velocità, è quando si dispone già l'elemento DOM:

$('div').click(function(){ 
    $('img', this).doSomething(); // This is good 
}); 
5

James Padolsey ha scritto an excellent article sul codice jQuery odori. Consiglio di leggerlo.

+0

questo è un bell'articolo – Anurag

Problemi correlati