都是不清空已注册的事件吧 然而我这么写就无法调用事件了
<html> <head> <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> <script src="http://lib.sinaapp.com/js/jquery/1.9.1/jquery-1.9.1.min.js"></script> <style type="text/css"> p { color: red; } </style> </head> <body> <div> <p>P元素1,默认给绑定一个点击事件</p> <p>P元素2,默认给绑定一个点击事件</p> </div> <button id="bt1">点击删除 p 元素</button> <button id="bt2">点击移动 p 元素</button> <script type="text/javascript"> $('p').click(function(e) { alert(e.target.innerHTML) }) var p; $("#bt1").click(function() { if (!$("p").length) return; //去重 //通过detach方法删除元素 //只是页面不可见,但是这个节点还是保存在内存中 //数据与事件都不会丢失 p = $("p"); $("p").parent().html(""); }); $("#bt2").click(function() { //把p元素在添加到页面中 //事件还是存在 $("div").append(p); }); </script> </body> </html>
p并不是指向内存堆中原来的jQuery对象
你可以试下console.log(p==$("p")) //返回值false
js中 参数是按值传递 而不是按引用地址传递 你给$('p')这个jQuery对象绑定了事件,并没有给p绑定事件。