为了账号安全,请及时绑定邮箱和手机立即绑定

.parent.html("")和.detach()的区别

都是不清空已注册的事件吧 然而我这么写就无法调用事件了

<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>


正在回答

2 回答

p并不是指向内存堆中原来的jQuery对象
你可以试下console.log(p==$("p"))  //返回值false

1 回复 有任何疑惑可以回复我~
#1

牡蛎先生 提问者

非常感谢!
2017-06-20 回复 有任何疑惑可以回复我~

js中 参数是按值传递 而不是按引用地址传递  你给$('p')这个jQuery对象绑定了事件,并没有给p绑定事件。

0 回复 有任何疑惑可以回复我~
#1

牡蛎先生 提问者

我的p指向的不就是内存堆中原来的jQuery对象吗? 事件不是通过隐式迭代绑定给里面的DOM对象吗? 没理解你的意思啊
2017-06-20 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
jQuery基础(二)—DOM篇
  • 参与学习       114014    人
  • 解答问题       590    个

jQuery第二阶段开启DOM修炼,了解创建、插入、删除与替换

进入课程

.parent.html("")和.detach()的区别

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信