为什么jquery也在克隆children元素



假设我有以下代码:

<ul> 
  <li>1</li>
  <li>2</li>
  <li>3</li>
</ul>

现在,当我执行$("ul").clone();时,它会克隆完整的ul元素(它的所有子元素也是)。我只想克隆<ul>,而不想克隆它的子代。

如何在jQuery中做到这一点?

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

您可以清空元素:

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

给定的解决方案存在两个问题。

  1. 他们克隆所有儿童及其数据,效率低下,这是不必要的。

  2. 他们使用本机克隆,不克隆事件处理程序和其他数据。

如果要使用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);

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

使用.html('')清空内容。试试这个:

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

工作演示

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

描述:创建一组匹配元素的深度副本。

因此,使用jQuery,您希望能够只获得ul

你有两个选择:

  1. 清空jQuery返回的对象:

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

  2. 使用纯Javascript:

    var simpleUl = $($('ul').get(0).cloneNode());

最新更新