jQuery中删除方法empty(),remove()和detach()的区别

empty():清空匹配的元素集合中所有的子节点,自身节点和事件都未被删除。

remove():这个方法不会把匹配的元素从jQuery对象中删除,因而可以在将来再使用这些匹配的元素。但除了这个元素本身得以保留之外,其他的比如绑定的事件,附加的数据等都会被移除。

detach():这个方法不会把匹配的元素从jQuery对象中删除,因而可以在将来再使用这些匹配的元素。与remove()不同的是,所有绑定的事件、附加的数据等都会保留下来。

举个栗子:

1 <body>
2     <div id="div1" style="height: 100px;width: 300px;border: 1px solid black;background: yellow;">
3             this is some text in the div.
4         <p id="panel">pppp</p>
5         <p>two ppppppp</p>
6     </div>
7     <button>删除div元素</button>
8 </body>

empty():清空节点,保留自身。

$('button').click(function () {
    $('#div1').empty();            
})

效果:

remove():删除被选元素极其子元素。

$('button').click(function () {
    $('#div1').remove();            
})

效果:

detach()方法同detach,但是可以保留jquery相关的数据和绑定事件。

1 $('#panel').hover(function () {
2     $(this).css('color','red');
3 })
4     var deleteP = $('#panel').detach();
5     $('#div1').append(deleteP);

效果:

 

如果用remove()不会保留数据和绑定事件。

$('#panel').hover(function () {
    $(this).css('color','red');
})
    var deleteP = $('#panel').remove();
    $('#div1').append(deleteP);

效果:p不会改变颜色,hover不起作用

 

 

 关于追加之后p跑到下边问题:

首先,你通过$("p").detach()把上面的p给“删除/隐藏”了,实际上p还是存在的,只是你看不到了。
然后你又用
$("body").append($("p").detach());
向body中添加元素,这个元素其实还是p。

不是p跑到下面,而是你把p给“复制”了一个并添加到最下面,原来的p给隐藏了。

 

 

提示:如需移除元素,但保留数据和事件,请使用 detach() 方法。

提示:如需移除元素及它的数据和事件,请使用 remove() 方法。

提示:如只需从被选元素移除内容,请使用 empty() 方法。

 

转载于:https://www.cnblogs.com/angry-apple/p/8274340.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值