2012-06-10 73 views
8

我看到许多人检查,看看是否DOM元素分配一个事件之前就存在,例如(CoffeeScript的):在分配事件之前我们应该检查元素是否存在吗?

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

这个必要吗?如果我们只是添加事件,无论元素是否存在,性能是否会受到影响?

+2

那是jQuery的? –

+0

我想你会首先得到一个错误,不是吗? – thescientist

+0

它从Coffeescript转换为直接JavaScript。我猜这个错误没有出现,因为这个事件没有用户交互加载(参见下面的gabrielhilal的回答)。 –

回答

12

jQuery中的每个方法调用都被包装在一个.each函数中,因此检查一个元素是否存在通常是不必要的 - 如果该函数集为空,那么将不会有被调用函数的迭代,它会静默地失败。给出的例子就是一个很好的例子,只需直接拨打$('#progressbar').progressbar()就没有任何伤害或性能损失。

当你想这样做,可能是因为你是操纵DOM或做取决于元素的存在一些昂贵的操作,请确保您缓存的号召,特别是如果它是一个复杂的选择:

specialThings = $('section .special') 

if specialThings.length > 0 
    doStuffWith specialThings 

或替代,以CoffeeScript中的VAR安全优势:

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

这很有道理,谢谢! –

相关问题