我看到很多人在分配事件之前检查是否存在DOM元素,例如(coffeescript):
$ ->
if( $("#progressbar").length > 0 )
$("#progressbar").progressbar( value: 0 )
这有必要吗?如果我们只是添加事件,无论元素是否存在,是否会影响性能?
答案 0 :(得分:13)
jQuery中的每个方法调用都包含在.each
函数中,因此检查元素是否存在通常是不必要的 - 如果集合为空,则不会对被调用函数进行迭代,它会无声地失败。给出的示例是一个很好的例子,直接调用$('#progressbar').progressbar()
没有任何伤害或性能损失。
当你做想要这样做时,可能是因为你正在操纵DOM或根据元素的存在做一些昂贵的操作,请确保你缓存这个电话,特别是如果它是复杂的选择器:
specialThings = $('section .special')
if specialThings.length > 0
doStuffWith specialThings
或者,利用coffeescript的var安全性:
if (specialThings = $ 'section .special').length
doStuffWith specialThings