第二种方法很可能提供微不足道的性能提升(假设您没有大量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
. 这样,事件在被处理之前就不需要传播太远了。
有了事件委托,您可以从动态添加本身中删除click
逻辑:div
$("<div>", {'class': 'ok'}).appendTo("body");