node.firstChild与 node.children[0]2个取得的都是父节点的第一个子节点。但问题就出现在这里。
<ul id="wrap"> <li>test1</li> <li>test2</li> <li>test3</li> <li>test4</li> </ul>
如这样所设置时,node.firstChild就会取得文本节点,当做一个第一节点替换的时候,你就会发现节点不但没有被替换,而且还增加了一个节点,
而node.children[0]取到的节点就是元素节点,替换成功。
测试例子
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title> </head> <body> <ul id="wrap"> <li>test1</li> <li>test2</li> <li>test3</li> <li>test4</li> </ul> <button id="add">添加</button> <button id="insert">插入</button> <button id="replace">替换</button> <button id="remove">删除</button> <script type="text/javascript"> function myClick(node, fun) { var wrap = document.getElementById(node); wrap.onclick = fun; } var warp = document.getElementById("wrap"); // add myClick("add", function() { var li = document.createElement("li"); var add = document.createTextNode("add"); li.appendChild(add); warp.appendChild(li); }); // insert myClick("insert", function() { var li = document.createElement("li"); var add = document.createTextNode("add"); li.appendChild(add); warp.insertBefore(li,wrap.firstChild); }); // replace myClick("replace",function(){ var li = document.createElement("li"); var add = document.createTextNode("add"); // alert(warp.children[0]==warp.firstChild);//文本节点 li.appendChild(add); //warp.replaceChild(li,warp.firstChild);//替换失败,会发现第一个节点不但没被替换,还增加了。 warp.replaceChild(li,warp.children[0]); }); // remove myClick("remove", function() { warp.removeChild(warp.lastChild); }); </script> </body> </html>
这是在warp.firstChild 下操作的