如果我有一个包含删除记录链接的表格,那么连接点击事件的最佳方法是什么?这些方法在幕后是否评估相同?
$("#table").on("click", ".delete", function(){
//do stuff
});
或者
$("#table .delete").click(function(){
//do stuff
});
如果我有一个包含删除记录链接的表格,那么连接点击事件的最佳方法是什么?这些方法在幕后是否评估相同?
$("#table").on("click", ".delete", function(){
//do stuff
});
或者
$("#table .delete").click(function(){
//do stuff
});
.on()
可以通过委托事件来节省附加事件所需的计算资源和内存,并提供一个动态元素,使得事件也适用于未来的元素。.click()
会显式地附加事件到每一个匹配的元素上,这样可以节省执行时的计算资源,但是实际情况下,这并不是瓶颈问题的首要解决方法。int
还是string
。每种类型都有其用途...不是关于哪个更快,而是关于在什么情况下使用什么。
on
允许您将事件附加到动态添加的元素,而click
则不行。on
。click
比 on
更快,因为它直接将事件附加到元素上,而 on
则是将事件附加到 #table
上,并查找 .delete
元素以触发事件,因此在触发 click
事件之前需要执行一些代码。
虽然差异微不足道,但您不会看到任何区别。
如果您使用 on
,则只需要一个事件处理程序即可处理 #table
内任意数量的 .delete
元素,而 click
将附加到每个 .delete
元素,因此从内存利用方面来说,on
更好。
on
比click
更快地触发事件的说明? - ShankarSangoli.click(...)
可能会更慢,因为它需要遍历与选择器匹配的每一行和每个单元格,并将处理程序函数附加到每个单元格。在这种特定情况下,on(...)
更快,因为它将处理程序附加到表而不是具有 .delete
类的每个元素。$('#rootItem').on('click', '.foo .bar.baz .bum', function() { /* do stuff*/ })
,那么它会比 $('#rootItem').on('click', '.foo', function() { /* do stuff*/ })
慢,因为前者的选择器更加复杂。在这种情况下,可能更明智的做法是在附加时付出代价,并使用 click(...)
来节省运行时评估每个点击是否与选择器 '.foo .bar.baz .bum'
匹配的成本。像你所拥有的简单单类选择器('.delete'
)将表现得非常好。click(...)
。 on(...)
函数可以更好地处理这个问题,只要你的“外部”选择器(在这种情况下为 '#table'
)不指向将被动态添加的元素。将 '#table'
替换为 '.table'
,并动态添加一个新的带有类 table
的表格,新添加的表格将不会从你最初调用 on(...)
附加事件处理程序。
on
比click
更快,因为click
在内部调用了on
。但我真的怀疑它是否会影响您应用程序的整体性能。针对这些问题,请查看源代码:https://github.com/jquery/jquery 这里更重要的是这些调用不是等价的。第一个仅附加一个事件处理程序并使用事件委托,而第二个则将事件处理程序附加到#table
内的每个.delete
。 - Felix Kling#table
的内容发生了变化,比如从ajax重新加载,则使用on
。 - Henesnarfel