JS替换HTML中现有元素,并将所有属性重新设置给新元素

JS替换HTML中现有元素,并将所有属性重新设置给新元素

场景

例子:给了我们一个单选按钮来选择某个dom元素的类型。

那么这时候,我们可以选择把所有的元素都写出来,然后根据单选的value去进行判断,展示哪一个元素。但是同样,我们也可以根据value的值,进行dom元素的替换,当单选切换不是很频繁时,这种方式的性价比可能会更高(个人想法,如有错误,欢迎纠正)

解决思路

首先获取到需要替换的元素,并且创建新的元素,将旧dom中的属性全部转移给新的dom后,在将其替换。

代码

此处以元素id为例子,要替换特定id的dom元素

replaceDom(domsIds, createTag){ // domsId:需要替换的元素的ID数组,createTag:要创建的元素的标签
	let doms = domIds.map((domId) => {
		return document.getElementById(domId)
	})
	doms.forEach((dom) => {
		// 获取dom元素的所有属性,返回的是NamedNodeMap类型
		let attrs = dom.attributes
		let newDom = document.createElement(createTag)
		for(let index = 0;index<attrs.length;index++){
			// 获取元素的属性key
			let nodeName = attrs[index].nodeName
			// 获取旧元素属性并赋值给新元素
			newDom.setAttribute(nodeName, dom.getAttribute(nodeName))
			//该方法也可以实现
			// newDom.setAttribute(attrs[index].name,attrs[index].value)
		}
		// 元素替换
		dom.parentNode.replaceChild(newDom,dom)
	})
}
		

补充(关于NamedNodeMap)

NamedNodeMap

NamedNodeMap的属性及方法

列表的属性/方法:

属性/方法描述
nodemap.length节点列表中的节点数量。
nodemap.getNamedItem(nodeName)从节点列表中返回的指定属性节点。
nodemap.item(index)从节点列表中获取指定下标的节点。
nodemap.removeNamedItem(nodeName)在节点列表中删除指定节点名的节点
nodemap.setNamedItem(node)在节点列表中添加节点,如果节点名已存在,则进行替换

节点的属性/方法:

属性/方法描述
node.isId节点是否为ID节点,如果是返回true,否则返回false
node.name返回节点的nodeName
node.value设置或返回节点的value
node.specified如果属性被指定返回 true ,否则返回 false
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值