我看到许多人检查,看看是否DOM元素分配一个事件之前就存在,例如(CoffeeScript的):在分配事件之前我们应该检查元素是否存在吗?
$ ->
if($("#progressbar").length > 0)
$("#progressbar").progressbar(value: 0)
这个必要吗?如果我们只是添加事件,无论元素是否存在,性能是否会受到影响?
我看到许多人检查,看看是否DOM元素分配一个事件之前就存在,例如(CoffeeScript的):在分配事件之前我们应该检查元素是否存在吗?
$ ->
if($("#progressbar").length > 0)
$("#progressbar").progressbar(value: 0)
这个必要吗?如果我们只是添加事件,无论元素是否存在,性能是否会受到影响?
jQuery中的每个方法调用都被包装在一个.each
函数中,因此检查一个元素是否存在通常是不必要的 - 如果该函数集为空,那么将不会有被调用函数的迭代,它会静默地失败。给出的例子就是一个很好的例子,只需直接拨打$('#progressbar').progressbar()
就没有任何伤害或性能损失。
当你做想这样做,可能是因为你是操纵DOM或做取决于元素的存在一些昂贵的操作,请确保您缓存的号召,特别是如果它是一个复杂的选择:
specialThings = $('section .special')
if specialThings.length > 0
doStuffWith specialThings
或替代,以CoffeeScript中的VAR安全优势:
if (specialThings = $ 'section .special').length
doStuffWith specialThings
这很有道理,谢谢! –
那是jQuery的? –
我想你会首先得到一个错误,不是吗? – thescientist
它从Coffeescript转换为直接JavaScript。我猜这个错误没有出现,因为这个事件没有用户交互加载(参见下面的gabrielhilal的回答)。 –