日期:2014-05-16  浏览次数:20295 次

关于jquery对象的疑惑
<!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对象应该不存在了,为什么第二次还输出内容啊?

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

------解决方案--------------------
1#已经说了,从文档中删除,内存中还存在,就如你新创建的对象,没有添加到文档中不是一样可以引用到