最近在写一个组件,然后需要进行DOM对象的克隆引发的问题
首先js对dom的克隆在原生js API就一个方法
var origin = document.getEleme.getElementById("需要克隆的元素id");
//这个是进行浅克隆,就克隆当前标签,子标签这些都不克隆
var originNew = origin.cloneNode();
//这个时候我们需要加一个参数 进行深克隆
var originNew = origin.cloneNode(true);
问题: 克隆完成后发现,cloneNode()方法就单克隆了标签,属性这些都没有。我们就可以通过事件自己复制属性过来
var origin = document.getEleme.getElementById("需要克隆的元素id");
//这个是进行浅克隆,就克隆当前标签,子标签这些都不克隆
var originNew = origin.clone(origin);
function clone(origin) {
var originNew = origin.cloneNode();
//进行attr属性的复制过来 同理,想在克隆的时候复制其他同样可以加进来
if (origin.attributes != null) {
for (var index = 0;index < origin.attributes.length;index++){
var attr = origin.attributes[index];
var name = attr.name;
var value = attr.value;
originNew.setAttribute(name,value);
}
}
//克隆子标签
var originChildNodes = origin.childNodes;
for (var index = 0;index < originChildNodes.length;index++) {
var node = originChildNodes[index];
if (node != null) {
//递归进行子标签的克隆
var childNode = clone(node);
originNew.appendChild(childNode);
}
}
return originNew;
};
注意:
1、由于之前写过,代码也不复杂。这博客是直接盲打,如果有写错的地方运行不了,还请大哥指点。
2、上面这个只是加了克隆 attr 属性部分,还想克隆其他的可以自己加
3、提示: 可以通过for (var o in origin) 直接遍历DOM