js进行DOM深克隆(连同属性也一起克隆)

最近在写一个组件,然后需要进行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

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值