<!DOCTYPE html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
<script>
$(function() {
var divs = $('#divId div');
$.each(divs, function(i, dom) {
alert($(dom).html());
});

//$('#divId').append($('#divId').find('div')[0]);
$($('#divId').find('div')).remove();
//var divs = $('#divId div');
$.each(divs, function(i, dom) {
alert($(dom).html());
});
});
</script>
</head><body>
<div id='divId'>
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
</div>
</body>
</html>第一次把div id 为divId内的div保存在了divs里面了
一次循环输出div里面内容
第二次把divId里面的div给删除了,dom里面不存在了
那么divs的属性0,1,2,3分别指向的dom对象应该不存在了,为什么第二次还输出内容啊?

解决方案 »

  1.   

    我想这个是因为,remove是从DOM Tree中remove掉,然而divs中依然保存着这4个div对象的引用,所以内存中仍然还是有他们的存在的,因此innerHTML还是可以获取得到的。要是第二次换成:
    $('#divId div').each(function(i, dom) {
        alert($(dom).html());
    });
    就没有了。
      

  2.   

    var domtree = {
    divt : {
    span : 'spantext',
    h1 : 'h1text'
    }
    }
    var $tem = domtree.divt.span;
    delete domtree.divt.span;
    var $a = domtree;
    alert($tem);
      

  3.   

    1楼说得有道理。。
    楼主这样试试?$(function() {
        $('#divId div').each(divs, function(i, dom) {
            alert($(dom).html());
        });
        $('#divId').find('div').remove();
        $('#divId div').each(divs, function(i, dom) {
            alert($(dom).html());
        });
    });
      

  4.   

    不让其弹出的方法知道,但是想知道原因,为什么对象删除了,还会引用那个对象啊?因为js中实际上没有真正意义的删除,只有构造函数没有析构函数,也不能手动析构一个对象,只能切断对象的引用,眼巴巴等待gc把这货收走。
    jQuery的remove,用的是DOM里的removeChild方法,只是删除掉parent对childNode的引用,然后LZ的代码已经保留了这些Node的引用,获取innerHTML仍然可以顺利返回。
    对象没有删除,只是把引用对象的指针置成空了。
      

  5.   

    不让其弹出的方法知道,但是想知道原因,为什么对象删除了,还会引用那个对象啊?因为js中实际上没有真正意义的删除,只有构造函数没有析构函数,也不能手动析构一个对象,只能切断对象的引用,眼巴巴等待gc把这货收走。
    jQuery的remove,用的是DOM里的removeChild方法,只是删除掉parent对childNode的引用,然后LZ的代码已经保留了这些Node的引用,获取innerHTML仍然可以顺利返回。
    对象没有删除,只是把引用对象的指针置成空了。
    $(function() {
    var dis = document.getElementById('di');
    alert(dis.innerHTML);
    document.getElementById('divId').removeChild(document.getElementById('di'));
    //dis = null;
    alert('-' + document.getElementById('di'));
    alert(dis.innerHTML);
    });
    经过初步思考,有可能remove掉的只是dom树中对象,但是由于还有引用指向了对象,所有对象还存在于内存中
      

  6.   

    <div id='divId'>
    <div id='di'>sfsfsf</div>
    </div>