使用DOM.replaceChild需要注意的一些问题

方法:

DOM.replaceChild( newNode, oldNode )

该DOM对象的方法接受2个参数,第一个代表新DOM节点,第二个代表要被替换的节点,其中第二个参数必须是该DOM的子元素

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        div{
            width: 100px;
            height: 100px;
            border: solid;
        }
        div#d2{
            border-color: red;
        }
    </style>
</head>
<body>
    <button id="ipt">替换</button>
    <div id="d1"><span id="rep">一个span</span></div>
    <div id="d2"><span id="berep">被替换的span</span></div>
</body>
<script>
    var $ = s=>document.querySelectorAll(s);
    var [ ipt, d1, rep, d2, berep ] = [...$('[id]')];//请参考html中的id
    ipt.onclick = func=>{
        d2.replaceChild( rep , berep );//替换
    }
</script>
</html>

需要注意的是:在函数调用以后,如果newNode在DOM树中,newNode就会移动到该DOM元素的子节点

替换前
替换后

如果要保留原节点,请用cloneNode()方法

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        div{
            width: 100px;
            height: 100px;
            border: solid;
        }
        div#d2{
            border-color: red;
        }
    </style>
</head>
<body>
    <button id="ipt">替换</button>
    <div id="d1"><span id="rep">一个span</span></div>
    <div id="d2"><span id="berep">被替换的span</span></div>
</body>
<script>
    var $ = s=>document.querySelectorAll(s);
    var [ ipt, d1, rep, d2, berep ] = [...$('[id]')];
    ipt.onclick = func=>{
        d2.replaceChild( rep.cloneNode(true) , berep );//true代表连同子节点一起克隆
    }
</script>
</html>

点击第一次,没什么问题:


QQ截图20171103165459.png

然而点击第二次,就会报错:


QQ截图20171103165504.png

原因在于:

d2.replaceChild( rep.cloneNode(true) , berep );

中的berep已经被替换,不再是d2的子节点了
若想保证脚本正常运行,需要传入d2当前的子节点而非被替换掉的berep

d2.replaceChild( rep.cloneNode(true) , d2.children[0] )

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本章内容 理解包含不同层次节点的 DOM 使用不同的节点类型 克服浏览器兼容性问题及各种陷阱 DOM 是针对 HT...
    闷油瓶小张阅读 689评论 0 1
  • 1. 什么是DOM 文档对象模型 (DOM) 是HTML和XML文档的编程接口。它提供了对文档的结构化的表述,并定...
    hanyuntao阅读 1,298评论 0 4
  • 什么是DOM??? DOM(Document Object Model 文档对象模型)是针对HTML和XML文档的...
    荧惑3_3阅读 1,424评论 0 1
  • 福州课程结束,终于回到wuli大美新疆。回来几乎天天都在吃肉,今天开始辟谷… 非常幸运的是朋友一家去伊犁玩,然后带...
    点滴XY阅读 417评论 8 2
  • 【2013.8.6】 【阑边偷唱系瑶簪,前事总堪惆怅,寒风生,罗衣薄,万般心】 使一把小巧玲珑的剪口钳,将一段雪色...
    苏若容阅读 386评论 0 3