在事件注册时的事件处理程序查询?

时间:2014-06-03 14:35:27

标签: javascript jquery event-handling

我知道某些查询比其他查询花费的时间更长(例如,复合查询比简单查询慢,ID比类快等等)。就我而言,这具有实际意义。想知道它如何应用于事件处理程序中的查询。

查询是否会对事件处理程序触发的速度产生影响?或者查询是否已解析为DOM中该对象的某种指针?

例如,这些处理程序是否绝对等效? :

$("body > section > #id div.class element").click(func);
$("#element").click(func);

1 个答案:

答案 0 :(得分:1)

在您给出的情况下,选择器的速度只会影响页面的初始设置 - 查找放置事件处理程序的元素的速度。附加事件处理程序后,选择器不应影响实际事件处理程序触发的速度。

选择器速度对事件处理程序很重要的情况是使用on()函数为可能尚不存在的元素定义事件处理程序的位置 - "委托"事件。例如:

$( "#dataTable tbody" ).on( "click", "tr", func);

 $( "#dataTable tbody" ).on( "click", ".my-table-row", func);

第一个事件处理程序的性能会更好(尽管它绝对值得指出差异通常很小)。这种情况与您的示例不同的原因是实际的点击处理程序被放置在tbody上,然后在开火时使用选择器来确定给定事件是否匹配。