Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 附加克隆元素时应该使用clone(true),还是在()上使用clone(false)?_Javascript_Jquery - Fatal编程技术网

Javascript 附加克隆元素时应该使用clone(true),还是在()上使用clone(false)?

Javascript 附加克隆元素时应该使用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 $(

在克隆一个元素并将其附加到另一个元素时,最好是从原始元素克隆事件,还是使用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>


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

      主要的好处是,您不需要为每个对象附加新函数,这意味着占用的内存更少;相反,事件将冒泡到相同的事件处理功能:

      $("#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)是否创建另一个事件?