a260881071 2011-08-25 15:01
浏览 276
已采纳

大家帮我看看这断代码内存怎么释放

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">



<br>
<script src="js/JsGrid/jquery-1.5.2.min.js" type="text/javascript"></script>

<script type="text/javascript">
    function test() {
        var mytb = document.getElementById("tb");
        var r = null;
        var c = null;
        for (var i = 0; i < mytb.rows.length; i++) {
            r = mytb.rows[i];
            c = r.cells;
            //$(c[0]).empty();
            c[0].innerHTML = "<img  align='center' border='0' src ='images/zhuangtai_1.jpg'></img>";//内存不断增加
            //c[0].innerHTML = "如果是文字就可以释放?";//内存无改变。
            //$(c[0]).html("<img  align='center' border='0' src ='images/zhuangtai_1.jpg'></img>");
            //c[0] = replaceHtml(c[0], "<img  align='center' border='0' src ='images/zhuangtai_1.jpg'></img>");
        }
    }

    onload = function() {
        for (var i = 0; i < 200; i++) {
            var r = document.getElementById("tb").insertRow(0);
            var c = r.insertCell(0);
            c.innerHTML = "内存为什么释放不出来呢?"
        }
        setInterval(test, 1000);
    };

    //        function replaceHtml(el, html) {
    //            var oldEl = typeof el === "string" ? document.getElementById(el) : el;
    //            // 单纯innerHTML在IE中会稍微更快一些
    //            oldEl.innerHTML = html;
    //            return oldEl;

    //            var newEl = oldEl.cloneNode(false);
    //            newEl.innerHTML = html;
    //            oldEl.parentNode.replaceChild(newEl, oldEl);
    //            /* 因为我们只是从DOM中移除旧元素,所以返回一个新元素引用用作恢复 */
    //            return newEl;
    //        }
</script>













我的问题和[url]http://www.iteye.com/topic/617997[/url]差不多。
搞了两天了,不知道怎么解决。

  • 写回答

2条回答 默认 最新

  • cyrilluce 2011-08-25 19:31
    关注

    只是IE8才存在问题吧?你只要用img,就是无解的。
    最好的方法是使用其它标签替代img来显示图片,一般我是用div的,定义个宽、高、背景图片,就当图片用了,创建速度比img要快,并且不泄漏。

    P.S. 我以前也碰到过这问题([url]http://www.iteye.com/topic/704890[/url]),就是用这种方法解决的,即替换标签。当然复用也行,不过那个开发难度有些大。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?