将所有的span标签转换为div标签:
changeTag(){
const list = document.getElementsByTagName('span');
for(const dom of list){
const attrs = dom.attributes;
const newDom = document.createElement('div');
for(let index=0; index<attrs.length; index++){
let nodeName = attrs[index].nodeName; //属性名称
newDom.setAttribute(nodeName, dom.getAttribute(nodeName));
}
// 将span标签替换为div标签
dom.parentNode.replaceChild(newDom, dom);
}
}
但是结果是span标签会隔一个被替换,像<div>...<span>...<div>...<span>...这样。
原因:
因为每次替换后list的长度就少1,那么替换一个后,原本要替换的第2个元素变成了第1个元素,它就被跳过了,此时替换的就是原本的第3个元素,所以才会出现隔一个替换一个的情况。
解决:
复制所有span标签的dom节点,保证遍历的节点列表不会变化
const changeTag = ()=>{
const list = document.getElementsByTagName('span');
// 复制list下所有节点
const list1 = [...list];
for(const dom of list1){
const attrs = dom.attributes;
const newDom = document.createElement('div');
for(let index=0; index<attrs.length; index++){
let nodeName = attrs[index].nodeName; //属性名称
newDom.setAttribute(nodeName, dom.getAttribute(nodeName));
}
// 将span标签替换为div标签
dom.parentNode.replaceChild(newDom, dom);
}
}