Javascript 附加克隆元素时应该使用clone(true),还是在()上使用clone(false)?
在克隆一个元素并将其附加到另一个元素时,最好是从原始元素克隆事件,还是使用on()不必克隆事件?更好的方法是更快,使用更少的内存,并且是更正式的方法。请解释为什么一种方法比另一种好。多谢各位 不克隆事件的选项1Javascript 附加克隆元素时应该使用clone(true),还是在()上使用clone(false)?,javascript,jquery,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(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>
您应该使用事件委派(启用选项);主要的好处是您不必在附加之后附加另一个事件处理程序;只需事先定义事件处理
主要的好处是,您不需要为每个对象附加新函数,这意味着占用的内存更少;相反,事件将冒泡到相同的事件处理功能:
$("#list").on("click", "a", function(){alert('hello');});
// Don't run this after appending; you're already done setting up event handling.
事件委派稍微慢一点,但占用的内存要少得多。而且它被认为是更干净的方法。适当级别的活动授权效果良好。为什么jQuery在
上的中使用它,并在click()
@sabithpocker:什么?.on()
的非事件委派语法相当于.click()
。如果您使用的是jQuery,您可能并不真正关心性能和内存开销。@user1032531:这只是一种情况。不同的方法是可用的,因为不同的情况需要它们。如果我们不是在讨论成百上千个元素,所有元素都使用相同的处理程序,那么您可以选择任何一种方法。如果有许多元素,那么通过使用事件委派,您的内存开销总体上会减少,但在事件发生时会有更多的处理。如果事件类型不是单击
,而是可以重复发生的事件,如鼠标悬停
,那么我通常更喜欢将处理程序直接绑定到元素,这样就不会发生固定的委派费用。clone(true)是否创建另一个事件?