是否应该在附加克隆元素时使用clone(true),或者使用clone(false)使用on()?

时间:2013-05-27 18:07:25

标签: javascript jquery

克隆元素并将其附加到另一个元素时,最好是从原始元素克隆事件,还是使用on()以便不需要克隆事件?更好的是基于更快,使用更少的内存,以及更正式的方式。请解释为什么一种方式比另一种更好。谢谢

未克隆事件的选项1

$('#add').click(function(){$("#list").append($("#clone").clone(false));};
$("#list").on("click", "a", function(){alert('hello');});

选项2克隆事件

$('#add').click(function(){$("#list").append($("#clone").clone(true));};
$("#clone a").click(function(){alert('hello');});

两个选项共有的HTML

<a href="javascript:void(0)" id="add">Click</a>
<li id="clone"><a href="javascript:void(0)">Click</a></li>
<ul id="list"></ul>

2 个答案:

答案 0 :(得分:0)

您应该使用事件委派(on选项);主要好处是你不必在追加后附加另一个事件处理程序;只需事先定义事件处理。

主要的好处是你没有为每个对象附加一个新函数,这意味着消耗的内存更少;相反,事件将冒泡到相同的事件处理函数:

$("#list").on("click", "a", function(){alert('hello');});

// Don't run this after appending; you're already done setting up event handling.

答案 1 :(得分:0)

事件委托速度稍微慢一点,但内存却少得多。并且它被认为是更清洁的方法。