jQuery:live()vs delegate()
我在我的web应用程序中使用jQuery。 在阅读文档时,我阅读了关于live()
和delegate()
。 虽然他们解释了两种方法,但我不明白他们之间的确切区别。 也不确定在哪种情况下哪种方法是理想的。
请帮助我清楚了解这些方法。
谢谢
.live()
需要你立即运行select器,除非你使用的结果是非常浪费的。 这里的事件处理程序附加到document
,因此必须检查所有来自任何元素冒泡的事件。 这是一个用法示例:
$(".myClass").live("click", function() { alert("Hi"); });
请注意,语句$(".myClass")
运行该select器来查找所有具有该类的元素, 即使我们不关心它们 ,我们只需要string".myClass"
以便稍后在click
事件冒泡时匹配document
。
.delegate()
实际上在内部使用.live()
,但是使用上下文。 select器不是立即运行的,所以它已经更高效了,它不会附加到document
(尽pipe它可以)更加本地化……而其他所有来自其他元素树的其他事件都不会关心甚至检查时泡沫…再次更有效率。 这是一个用法示例:
$("#myTable").delegate("td", "click", function() { alert("Hi"); });
现在这里发生了什么? 我们运行$("#myTable")
来获取要连接的元素(比document
要贵,但是我们使用的是结果,然后附加一个事件处理程序到那个元素(或其他情况下)。从那个元素中检查"td"
select器,而不是像.live()
那样(因为一切都在document
)。
delegate()映射到jQuery代码中的live() 。 主要区别在于,您希望将事件委派给其他元素的元素上调用live() 。 live()将这些事件委托给文档对象。
另一方面, delegate()允许您通过传递select器来设置委派哪些元素事件。 如果起源元素与select器匹配,那么会触发到该元素的事件。
正如@NickCraver 提到的 , delegate()比live更好,因为它不一定捕获页面上每个元素的事件,也不会立即查询select器。
来自jQuery文档:
从jQuery 1.7开始,.live()方法已被弃用。 使用.on()附加事件处理程序。 老版本的jQuery用户应该优先使用.delegate().live()。
现场方式:
$("#mymethod").live("click", function() { alert("It checks the entire DOM"); });
实时方法检查整个DOM中的#mymethod(有时需要基于DOM内容的时间)
委托方法:
$('.mycontainer').delegate('#mymethod','click',function() { alert('Checks only in mycontainer portion') });
Delagate不会search您的整个DOM,只会search您的mycontainer部分(提高性能)