2010-01-15 8 views
18

¿Cuáles son las malas/peores prácticas de JQuery que ha visto, escrito o que debería evitarse?Jquery Prácticas erróneas

+1

Sé que ya lo comento, pero esta pregunta es un duplicado exacto: http://stackoverflow.com/questions/1229259/jquery-pitfalls-to-avoid –

Respuesta

30

Una cosa que debe evitar es usar los selectores "fáciles de usar" en cada línea una vez más, porque la implementación de JavaScript de los selectores no es que eficiente. Por supuesto, los muchachos de Quantum lo están optimizando, sin embargo, creo que deberías usarlo lo menos posible.

Por lo tanto, esta es una mala práctica.

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

encadenamiento es bueno

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

Y recordando las cosas de una variable local tampoco es malo:

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

Sí, mucha gente hace esto. Es tan malo para el rendimiento. – jerone

+0

+1 para señalar encadenamiento y variables locales! –

2

Aún utilizando el antiguo documento de la función de lista:

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

En lugar de la muy com lun:

$(function(){ }); 

No es realmente malo, pero muestro que la gente no se levanta con nuevas API.

+13

El uso de '$ (document) .ready (...)' se usa a menudo para hacer que el código sea explícitamente claro. Por supuesto que no es necesario, pero no es una mala práctica de la OMI. –

+1

Eso es lo que dije. :) – jerone

+1

¿Puedes explicarme por qué debería hacer eso?Creo que la primera versión tiene más sentido: estamos adjuntando un manejador de eventos al objeto DOCUMENT. El otro ... aunque quizás funcione mejor ... no se explica por sí mismo. – naivists

17

Hay dos que veo un montón:

Primera, en un evento de clic, el id se accede de esta manera:

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

Eso crea un nuevo objeto jQuery alrededor del DOM nodo, y llama a una función. La siguiente es la forma correcta:

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

Nota: Esto también verá $(this).attr('href'), pero eso es correcto debido a la forma de jQuery se normaliza en todos los navegadores.

El segundo está pasando nada, excepto un nodo DOM en el parámetro scope de la llamada jQuery:

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

no hay aumento de velocidad en absoluto al hacer esto. Cuando usted ve un aumento de velocidad, es cuando ya tiene el elemento DOM:

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