9

我看到很多人在分配事件之前检查是否存在 DOM 元素,例如(coffeescript):

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

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

4

1 回答 1

16

jQuery 中的每个方法调用都包装在一个.each函数中,因此通常不需要检查元素是否存在 - 如果集合为空,则调用函数将不会迭代,它会静默失败。给出的示例就是一个很好的例子,$('#progressbar').progressbar()直接调用不会造成伤害或性能损失。

当您确实想要这样做时,可能是因为您正在操作 DOM 或根据元素的存在进行一些昂贵的操作,请确保缓存调用,特别是如果它是一个复杂的选择器:

specialThings = $('section .special')

if specialThings.length > 0
    doStuffWith specialThings

或者,利用 coffeescript 的 var 安全性:

if (specialThings = $ 'section .special').length
    doStuffWith specialThings
于 2012-06-11T09:22:49.290 回答