有没有办法复制一个元素但不复制它的子元素?
我的目标是复制一个表格,并且包括所有类、内联样式等,但是我不想复制表格元素的任何子元素。
我知道可以复制整个表格,然后从复制品中删除子元素。但是我想要尽量减少屏幕闪烁,而且在DOM中可见之前操作元素可能会有问题。
有什么建议吗?
有没有办法复制一个元素但不复制它的子元素?
我的目标是复制一个表格,并且包括所有类、内联样式等,但是我不想复制表格元素的任何子元素。
我知道可以复制整个表格,然后从复制品中删除子元素。但是我想要尽量减少屏幕闪烁,而且在DOM中可见之前操作元素可能会有问题。
有什么建议吗?
您考虑过使用本地cloneNode
吗?此参数控制是否应该同时克隆子元素。
var clone = table.cloneNode(false);
但是这并不会克隆事件处理程序。 我不确定通过DOM API设置的样式是否会被克隆(可能不会)。
element.style.fontSize=...
,它将被添加到样式属性中,因此它会被克隆。 - Patrick EvanscloneNode()
。 - techfoobarvar t = document.createElement("table");
t.setAttribute("style",'background:#0F0; font-size:12px;');
var tr = document.createElement("tr");
var td = document.createElement("td");
td.appendChild(document.createElement("input"));
tr.appendChild(td);
t.appendChild(tr);
var clone = t.cloneNode();
console.log(clone);
//outputs
//<table style="background:#0F0; font-size:12px;"></table>
这只是另一种方法,可能是迄今为止发布的最丑陋的方法之一,但我只是增加了可能性。如果是我,我会使用Felix Kling的那个。
它基本上获取outerHTML
和innerHTML
,将一个减去另一个:table.prop('outerHTML').replace(table.prop('innerHTML'), '');
这里有一个演示。
HTML
<table class="some-class" style="border:1px solid #000" id="t">
<tr>
<td>first</td>
</tr>
</table>
JS
$(function () {
$('#t').addClass('another-class');
var table = $('#t')
var html = table.prop('outerHTML').replace(table.prop('innerHTML'), '');
$('body').append($(html).append('<tr><td>second</td></tr>'));
});
CSS
.some-class {
color: #00F
}
.another-class {
color: #00F;
font-size: 18px;
}