我在我的网络应用程序中使用jQuery。在阅读其文档时,我了解到了live()
和delegate()
。虽然他们已经解释了这两种方法,但我不明确它们之间的确切区别。同时也不确定在哪种情况下使用哪种方法更理想。
请帮助我清楚地了解这些方法。
谢谢
我在我的网络应用程序中使用jQuery。在阅读其文档时,我了解到了live()
和delegate()
。虽然他们已经解释了这两种方法,但我不明确它们之间的确切区别。同时也不确定在哪种情况下使用哪种方法更理想。
请帮助我清楚地了解这些方法。
谢谢
.live()
需要立即运行选择器,否则会非常浪费资源。这里的事件处理程序附加到document
,因此必须检查来自任何元素冒泡的该类型的所有事件。以下是一个使用示例:
$(".myClass").live("click", function() { alert("Hi"); });
$(".myClass")
运行了选择器来查找所有具有该类的元素,即使我们不关心它们,我们想要的只是在后面匹配字符串".myClass"
,以便在click
事件冒泡到document
时使用。
.delegate()
实际上内部使用 .live()
,但使用了一个上下文。选择器不会立即执行,因此它已经更加高效,并且没有连接到 document
(尽管可以这样做),所以更加本地化...并且那些来自其他元素树的其他事件在冒泡时甚至不会被检查...再次提高了效率。以下是使用示例:
$("#myTable").delegate("td", "click", function() { alert("Hi"); });
$(“#myTable”)
来获取要附加到的元素(比 document
显然更昂贵,但我们正在使用结果)。 然后我们附加一个事件处理程序到那个(或其他情况下的那些)元素。只有从该元素内部发生的 clicks
会被检查是否符合“ td”
选择器,而不是像 .live()
一样来自 everywhere (因为 everything 都在 document
中)。来自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') });
委托不会搜索整个DOM,它只会在你的mycontainer部分中搜索。(提高性能)
bind
、live
和delegate
之间的区别。 - Jon