appendChild() , insertBefore()插入节点需注意的问题

使用appendChild()和insertBefore()插入节点都会返回给插入的节点,
//由于这两种方法操作的都是某个节点的子节点,所以必须现取得父节点,代码中 someNode 表示父节点
//使用appendChild()方法插入节点
var returnedNode = someNode.appendChild(newNode);
alert(returnedNode == newNode) //true

//使用insertBefore()方法插入节点
var returnedNode = someNode.appendChild(newNode);
alert(returnedNode == newNode) //true

 值得注意的是,如果这两种方法插入的节点原本已经存在与文档树中,那么该节点将会被移动到新的位置,而不是被复制。

<div id="test">
	<div>adscasdjk</div>
        <div id="a">adscasdjk</div>
</div>
<script type="text/javascript">
	var t = document.getElementById("test");
	var a = document.getElementById('a');
	//var tt = a.cloneNode(true);
	t.appendChild(a);
</script>
在这段代码中,页面输出的结果和没有Javascript时是一样的,元素并没有被复制,由于元素本来就在最后一个位置,所以就和没有操作一样。如果把id为test的元素的两个子元素点换位置,就可以在firbug中看到这两个div已经被调换了位置。

如果我们希望把id为a的元素复制一个,然后添加到文档中,那么必须使被复制的元素现脱离文档流。这样被添加复制的节点被添加到文档中之后就不会影响到文档流中原本的节点。即我们可以把复制的元素放到文档的任何地方,而不影响被复制的元素。下面使用了cloneNode()方法,实现节点的深度复制,使用这种方法复制的节点会脱离文档流。当然,我不建议使用这种方法复制具有id属性的元素。因为在文档中id值是唯一的。

<div id="test">
	<div>adscasdjk</div>
        <div id="a">adscasdjk</div>
</div>
<script type="text/javascript">
	var t = document.getElementById("test");
	var a = document.getElementById('a');
	var tt = a.cloneNode(true);
	t.appendChild(tt);
</script>

相似的操作方法还有 removeNode(node)删除一个节点,并返回该节;replaceNode(newNode,node)替换node节点,并返回该节点。这两种方法相对来说更容易使用一些。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值