我们在分配事件之前应该检查元素是否存在吗?

9

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

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

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


我认为你首先会得到一个错误,不是吗? - thescientist
它已经从Coffeescript转换成了纯净的Javascript。我猜测错误之所以不会出现是因为该事件在没有用户交互的情况下加载(详见gabrielhilal的答案)。 - Craig Knox
1个回答

17

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

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

specialThings = $('section .special')

if specialThings.length > 0
    doStuffWith specialThings

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接