假设我有以下代码:
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
</ul>
现在,当我执行$("ul").clone();
时,它会克隆完整的ul
元素(它的所有子元素也是)。我只想克隆<ul>
,而不想克隆它的子代。
如何在jQuery中做到这一点?
我知道纯JavaScript(使用cloneNode()
),但我不能使用它,因为还需要执行其他方法。
您可以清空元素:
$('ul').clone().empty();
给定的解决方案存在两个问题。
-
他们克隆所有儿童及其数据,效率低下,这是不必要的。
-
他们使用本机克隆,不克隆事件处理程序和其他数据。
如果要使用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('');
工作演示
clone
方法创建元素的深度副本。
描述:创建一组匹配元素的深度副本。
因此,使用jQuery,您希望能够只获得ul
。
你有两个选择:
清空jQuery返回的对象:
$('ul').clone().empty();
使用纯Javascript:
var simpleUl = $($('ul').get(0).cloneNode());