我先叙述一下我所一件的问题 就是这个问题导致了内存溢出1.首先假设有一个parent的节点,该节点中有很个子节点
我们要完成以下功能,删除第一个 移动到最后一个去. function move(){
var firstElement_height=$("#panent").find("div:first").height();
$("#panent").animate({marginTop: -firstElement_height-11+"px"},1000,function(){
var tempElement = $("#panent").find("div:first").clone(true);
$("#panent").find("div:first").remove();
$("#panent").append(tempElement );
}
}setInterval(move,3000);
就这样 多跑跑 改改速度,IE中挂了,然后下载了一个sieve的工具进行检测,Orphan这个属性居然有很多是YES
文档中说明了这个属性的用处:
6、Orphan:如果这一列的值为“YES”,则表明这个元素不附属于document.body中(即页面的BODY中)。在IE中,这种元素会导致内存泄露,应给予高度的关注相当于现在不是删除了再增加节点,而是每次增加一个节点,久了就挂了
我想问题应该出在这里了,苦逼弄了几个小时想解决办法 没有进展,于是发出来大家看看 帮忙支支招。 如何才能彻底的删除,让对象彻底的释放。没用过sieve的可以百度百度
这个是下载链接
http://download.csdn.net/download/gufengpiaoxue/4941674
帮助文档:
http://wenku.baidu.com/view/153beb80ec3a87c24028c439.html
FF我测试过,没问题,应该在FF中有相应的处理来吧。。讨论讨论JavaScriptInternet ExplorerJquery内存溢出内存泄露
我们要完成以下功能,删除第一个 移动到最后一个去. function move(){
var firstElement_height=$("#panent").find("div:first").height();
$("#panent").animate({marginTop: -firstElement_height-11+"px"},1000,function(){
var tempElement = $("#panent").find("div:first").clone(true);
$("#panent").find("div:first").remove();
$("#panent").append(tempElement );
}
}setInterval(move,3000);
就这样 多跑跑 改改速度,IE中挂了,然后下载了一个sieve的工具进行检测,Orphan这个属性居然有很多是YES
文档中说明了这个属性的用处:
6、Orphan:如果这一列的值为“YES”,则表明这个元素不附属于document.body中(即页面的BODY中)。在IE中,这种元素会导致内存泄露,应给予高度的关注相当于现在不是删除了再增加节点,而是每次增加一个节点,久了就挂了
我想问题应该出在这里了,苦逼弄了几个小时想解决办法 没有进展,于是发出来大家看看 帮忙支支招。 如何才能彻底的删除,让对象彻底的释放。没用过sieve的可以百度百度
这个是下载链接
http://download.csdn.net/download/gufengpiaoxue/4941674
帮助文档:
http://wenku.baidu.com/view/153beb80ec3a87c24028c439.html
FF我测试过,没问题,应该在FF中有相应的处理来吧。。讨论讨论JavaScriptInternet ExplorerJquery内存溢出内存泄露
var div = $("#panent").find('div');
for(var i=0,len=div.length;i<len;i++){
div[i].someAttr = 'attrvalue'+i;
}
如果做过这样的操作,在IE下溢出是必然的。
1.这里的目的是删除第一个,进行clone,再放到末尾主要是为了接收新数据,将新的数据放入这个div中去 从而达到一个定时刷新的功能。
2.这里主要的问题是这样:用sieve的工具进行检测,Orphan这个属性居然有很多是YES,然而这些yes所标记的div, 都是曾经执行过remove了的div, 而对于orphan为yes的节点,在上面已经提到了他们是什么。。
这里并没有对DIV执行类似你所言的操作
$("#panent").append(tempElement ); 多看看API文档,这种问题很容易解决
页面上有如下div<div id = "logoParent">
<div id="logo">
</div>
执行如下操作:$("#logoParent").find("#logo").remove();
sieve检查如下图哈:马上看看你说的这个
window.attachEvent('onload',function(){
document.getElementById('dele').attachEvent('onclick',function(){
document.getElementById('logoParent').removeChild(document.getElementById('logo'));
});
})我都这样做了,还是这样,,弄的我也郁闷了,你确定这个玩意准???
setInterval(move,3000);一直在耗内存
var text="你要显示的信息";
parentNode.firstChild=parentNode.lastChild;
parentNode.lastChild.innerHTML=text;
function delectParent(node){
var pnode=node.parentNode;
pnode.innerHTML=""; //清除节点内的内容
pnode.removeNode(); //删除节点
delete pnode; //从内存中删除节点信息
}
我这样做的可以,不知能不能帮助你
clean= function (dom) {
var sons= dom.childNodes,uid=dom.$UID;
if(sons && sons.length==0) {
var i= sons.length ;
while(i--){
if(sons[i].nodeType ==1)
clean(sons[i]);
};
}
//这个是自己实现的cache,jQuery有他自己的,
if(uid != null){
delete _eleDatas[uid];
delete _collected[uid];
}
if (dom.removeEvents) dom.removeEvents(); //ie也知道它有bug,但只放出这个,它自动的不会,还要我们帮忙
if (dom.clearAttributes) dom.clearAttributes(); //同上
sons=i=uid=null;
return dom;
},delDom= ie?function (dom) { //ie的removeChild有bug,要这样才能彻底删除
clean(dom);
d.appendChild(dom);
d.innerHTML="";;
}:function (dom) {
clean(dom);
if(dom.parentNode) dom.parentNode.removeChild(dom);
};
ie=!+"\v1",
,如果你的需求是把 第一个元素放到最后 一个,也有可能是修改过后的,你大可以获取第一个元素 然后针对于你的需求做对应的修改,然后直接 将这个元素直接插入到 用用JQ的insertAfter方法试试 关于insertAfter API里面的解说:
如果一个被选中的元素被插在另外一个地方,它将被移动到目标元素的后面,注意是移动而不是复制这样的话应该就只是一个元素移动的问题了。