第二种方法提供的可能性微乎其微(假设您没有大量的div.ok
元素掉入DOM),因为DOM不需要再次搜索。另一种选择是使用html/props
签名:
$("<div>", {
'class': "ok",
'click': function() {
alert("You clicked the new element!");
}
}).appendTo("body");
演示:http://jsfiddle.net/w4Tj3/
记住.live()
已被弃用。如果您要使用活动委派,最好从现在开始使用.on()
。然而,就你而言,你并不一定需要。取而代之的是,以模仿.live()
你建立一个监听器上document
:
$(document).on("click", ".ok", function() {
alert("You clicked an .ok element!");
});
这种工作方式是通过利用事件冒泡行为。当你点击一个元素时,点击遍历DOM直到它最终到达document
对象。然后jQuery检查发起点击的元素是否与我们的选择器(.ok
)相匹配,并且它是否会运行匿名函数。
为了获得更好的性能,请不要绑定到document
,而要绑定到更接近动态添加元素的位置。例如,如果您动态添加li
元素,请绑定到其父项ol
或ul
。这样,事件在处理之前不需要传播太多。
有了事件委托,你可以从动态添加div
本身删除click
逻辑:
$("<div>", {'class': 'ok'}).appendTo("body");
你也知道'.live()'已被弃用,对吧? – Daedalus
是的,我知道。我们可以假设使用.on() – user1392191
@ user1392191:如果提供的任何响应已将您的问号中的一个回答为接受。但是,如果您仍然遇到此问题,请告诉我们。 – Nope