问答详情
源自:4-4 DOM节点删除之保留数据的删除操作detach()

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


提问者:牡蛎先生 2017-06-16 20:12

个回答

  • 噼里啪啦稀里哗啦啊啊啊
    2017-06-20 19:08:46
    已采纳

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

  • 噼里啪啦稀里哗啦啊啊啊
    2017-06-17 13:33:07

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