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()。

http://api.jquery.com/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部分(提高性能)