根据我的问题:adding .live to click functions in jquery
似乎普遍的共识是代表>以表演为目的。我应该将我的一生转变为代表吗?如果是这样,为什么要使用live函数,因为委托更好地表现了性能?
当它在DOM中没有看到我的选择器时委托“忽略”所有内容吗?
答案 0 :(得分:4)
如果没有任何明显的问题,您不应该重构代码以提高性能。但是,live()
存在可能影响代码可维护性的其他问题:
stopPropagation()
。live()
,则类的不同实例可能会相互干扰。至于为什么live()
仍然存在 - 根据this article:
作为一般的最佳做法,永远不要使用 .live在您的应用程序中。住了之后 在jQuery,Justin中引入 认为需要更好的活动 委托API和委托是 创建。 jQuery仍然是主要原因 支持live是遗留代码。
最后,delegate()
与live()
完全相同,只是它将事件处理程序附加到您指定的元素,而live()
将其附加到document
。当事件冒泡到指定的元素时,如果事件不是源自或通过与给定选择器匹配的元素,则忽略该事件。
答案 1 :(得分:0)
.live()如果在DOM中找不到选择器,也会忽略任何内容。从jQuery文档http://api.jquery.com/delegate/中了解它们是如何等效的:
Delegate是使用.live()方法的替代方法,允许将事件委托的每个绑定绑定到特定的DOM元素。例如,以下代理代码:
$("table").delegate("td", "hover", function(){
$(this).toggleClass("hover");
});
等效于使用.live()编写的以下代码:
$("table").each(function(){
$("td", this).live("hover", function(){
$(this).toggleClass("hover");
});
});