jQuery:live()vs delegate()

Chi*_*e G 50 javascript jquery live

我在我的Web应用程序中使用jQuery.在阅读其文档时,我读到了live()delegate().虽然他们已经解释了这两种方法,但我不明白它们之间的确切区别.还不确定哪种方法在哪种情况下是理想的.

请帮助我清楚地了解这些方法.

谢谢

Nic*_*ver 57

.live()要求你立即运行选择器,除非你使用结果它非常浪费.此处的事件处理程序已附加到document,因此必须检查来自任何元素冒泡的该类型的所有事件.这是一个用法示例:

$(".myClass").live("click", function() { alert("Hi"); });
Run Code Online (Sandbox Code Playgroud)

请注意,声明$(".myClass")跑了选择找到与该类的所有元素,即使我们不关心他们,我们所想要的是字符串".myClass"匹配,当click事件冒泡到document.


.delegate()实际上是在.live()内部使用,但有上下文.选择器不是立即运行的,所以它已经更有效了,并且它没有附加到document(虽然它可以)它更加本地化...而你不关心的其他元素树中的所有其他事件都不会冒泡时检查...再次更有效率.这是一个用法示例:

$("#myTable").delegate("td", "click", function() { alert("Hi"); });
Run Code Online (Sandbox Code Playgroud)

现在发生了什么?我们跑了$("#myTable")去重视(当然不是越贵的元素document,但我们使用的结果.然后,我们重视的事件处理程序到(或那些在其他情况下)的元素,只有clicks该元素对被检查"td"选择什么时候发生,而不是像所有地方一样.live()(因为一切都在里面document).


And*_*y E 6

delegate()映射到jQuery代码中的live().主要区别在于,您希望将事件委托给其他元素的元素上调用live(). live()会将这些事件委托给文档对象.

另一方面,delegate()允许您通过传递选择器来设置委派给哪些元素事件.如果原始元素与选择器匹配,则处理冒泡到该元素的事件.

正如@NickCraver所提到的,delegate()比live更好,因为它不一定从页面上的每个元素捕获事件,也不会立即查询选择器.