为什么jquery克隆了children元素呢?

时间:2014-04-21 14:05:18

标签: javascript jquery

假设我有以下代码:

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

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

如何在jQuery中执行此操作?

我知道纯JavaScript(使用cloneNode()),但由于还要执行其他方法,我无法使用它。

4 个答案:

答案 0 :(得分:2)

你可以清空元素:

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

答案 1 :(得分:0)

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

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

<强> Working Demo

答案 2 :(得分:0)

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

  

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

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

您有两种选择:

  1. 清空对象jQuery返回:

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

  2. 使用普通的Javascript:

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

答案 3 :(得分:0)

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

  1. 通过克隆所有儿童及其数据,它们会产生不必要的低效率。

  2. 他们使用的是原生克隆,它不会克服事件处理程序和其他数据。

  3. 如果您想使用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);
    

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