createElement的奇妙之处

circujoker_06 2016-11-25 11:01:57

<!DOCTYPE html>
<html>
<body>
<ul id="myList">
<li>Coffee</li>
<li>Tea</li>
</ul>
<p id="demo">请点击按钮向列表中添加项目。</p>
<button onclick="myFunction()">亲自试一试</button>
<script>
function myFunction() {
//代码片段一
//var node = document.createElement("LI");
//var textnode = document.createTextNode("Water");
//node.appendChild(textnode);
/*document.getElementById("myList").appendChild(node);*/
//document.getElementsByTagName("UL")[0].appendChild(node);
//上面这种就是不会删除原有的节点,只会在最后面添加相关的节点



//代码片段二
var textnode=document.getElementsByTagName("li")[0];
/*console.log(textnode);
debugger;*/
document.getElementsByTagName("UL")[0].appendChild(textnode);
//
}
</script>
<p><b>注释:</b>首先创建 LI 节点,然后创建文本节点,然后把这个文本节点追加到 LI 节点。最后把 LI 节点添加到列表中。</p>

</body>

</html>



为什么代码片段一是直接在末尾添加新的元素,而代码片段二中是会覆盖原有的元素的?也是说其执行的结果为tea coffee 而不是Coffee tea coffee
...全文
287 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
roffer 2016-11-25
  • 打赏
  • 举报
回复

var node = document.createElement("LI");

var textnode=document.getElementsByTagName("li")[0];

//换种方式来理解吧:node相当于 new 了一个对象,其引用地址是单独的,而下边的textnode引用的是同一个地址。
//也就是说复制一个原有的dom节点,插入到其他地方,之前的节点就会移除
天际的海浪 2016-11-25
  • 打赏
  • 举报
回复
因为appendChild()是移动元素,不是复制。如果被移动的元素已经在页面,移动后原来的地方当然就没有了

87,907

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧