2012-06-10 12 views
8

Veo a mucha gente comprobar para ver si existe un elemento DOM antes de asignar un evento, por ejemplo (CoffeeScript):¿Deberíamos verificar si el elemento existe antes de asignar eventos?

$ -> 
    if($("#progressbar").length > 0) 
     $("#progressbar").progressbar(value: 0) 

Es esto necesario? Si simplemente agregamos el evento de todos modos, si el elemento existe o no, ¿hay un golpe de rendimiento?

+2

Es que jQuery? –

+0

, creo que primero obtendrías un error, ¿no? – thescientist

+0

Se convierte de Coffeescript a Javascript directo. Supongo que el error no aparece porque este evento se carga sin la interacción del usuario (vea la respuesta de Gabrielleila a continuación). –

Respuesta

12

Cada llamada a un método en jQuery está envuelta en una función .each, por lo que no es necesario verificar si existe un elemento; no habrá iteraciones de la función llamada si el conjunto está vacío, falla silenciosamente. El ejemplo que se da es un buen ejemplo de eso, no hay ninguna penalización por daños o rendimiento simplemente llamando al $('#progressbar').progressbar() directamente.

Cuando hace quieren hacer eso, probablemente debido a que está manipulando el DOM o haciendo alguna operación costosa en función de la presencia de un elemento, asegúrese de guardar en caché el llamado, especialmente si se trata de un selector complejo:

specialThings = $('section .special') 

if specialThings.length > 0 
    doStuffWith specialThings 

o, alternativamente, tomando ventaja de la seguridad de CoffeeScript var:

if (specialThings = $ 'section .special').length 
    doStuffWith specialThings 
+0

Eso tiene sentido, ¡gracias! –

Cuestiones relacionadas