Javascript 为什么jquery也要克隆子元素?

Javascript 为什么jquery也要克隆子元素?,javascript,jquery,Javascript,Jquery,假设我有以下代码: <ul> <li>1</li> <li>2</li> <li>3</li> </ul> 一, 二, 三, 现在当我这样做时,$(“ul”).clone(),它克隆完整的ul元素(也克隆其所有子元素)。 我只想克隆,不想克隆它的子对象 如何在jQuery中实现这一点 我知道使用纯JavaScript(使用cloneNode()),但我不能使用它,因为还需要执行其

假设我有以下代码:

<ul> 
  <li>1</li>
  <li>2</li>
  <li>3</li>
</ul>
  • 一,
  • 二,
  • 三,
现在当我这样做时,
$(“ul”).clone()
,它克隆完整的
ul
元素(也克隆其所有子元素)。 我只想克隆
,不想克隆它的子对象

如何在jQuery中实现这一点


我知道使用纯JavaScript(使用
cloneNode()
),但我不能使用它,因为还需要执行其他方法。

您可以清空元素:

$('ul').clone().empty();
使用
.html(“”)
清空内容。请尝试以下操作:

 $("ul").clone().html('');

jQuery方法创建元素的深度副本

描述:创建匹配元素集的深度副本

因此,使用jQuery,您只需要获得
ul

你有两个选择:

  • 清空jQuery返回的对象:

    $('ul').clone().empty()

  • 使用纯Javascript:

    var simplel=$($('ul').get(0.cloneNode())


  • 给定的解决方案有两个问题

  • 克隆所有的孩子和他们的数据是不必要的低效

  • 它们使用本机克隆,不克隆事件句柄和其他数据

  • 如果要使用jQuery进行浅层克隆并传输所有数据,请在克隆操作之前分离其内容,然后在克隆操作之后替换它们

    // Fetch the ul and detach its contents
    var ul = $("ul");
    var contents = ul.contents().detach();
    
    // Do the clone, copying its data
    var clone = ul.clone(true);
    
    // Reattach the contents
    ul.append(contents);
    

    如果有多个元素,则在循环中执行此操作。

    因为克隆就是这样做的:。你看我也不明白吗?为什么您不能执行
    $($('ul').get(0).cloneNode()
    ?如果您不想要任何子元素,只创建一个新的空
    ul
    $('
    要比克隆元素(包括其子元素)然后删除其子元素便宜得多,正如一些答案所建议的那样。为什么不呢?克隆意味着创建具有相同值的新实例,
    子对象
    是其中一个值。根据定义,克隆将是一个深度副本。你想要一份深拷贝吗?只创建您需要的内容可能会更高效。如果您发现自己在生产代码中这样做,
    clone
    首先可能是错误的方法。FWIW jQuery有一个
    空的方法