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

关于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>
    <p>P元素1,默认给绑定一个点击事件</p>
    <p>P元素2,默认给绑定一个点击事件</p>
    <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").remove();
    });

    $("#bt2").click(function() {
        //把p元素在添加到页面中
        //事件还是存在
        $("body").append(p);
    });
    </script>
</body>

</html>

这里我把detach改成了remove,怎么还是能够append呢?

提问者:greenhandc 2017-03-16 15:01

个回答

  • 考拉joy
    2017-03-16 16:15:08

    p = $("p").remove();  p是一个对象,存储的是两个p节点 【<p>P元素1,默认给绑定一个点击事件</p> <p>P元素2,默认给绑定一个点击事件</p>】,

    remove删除了两个p节点及其绑定的事件,把删除的两个p节点存在了变量p里面,

    detach删除了两个p节点,但是其绑定的事件还在,一同存在了变量p里面,

    bt2 点击事件的时候又把变量p加到body上了