相关疑难解决方法(0)

jQuery.remove(),分离DOM元素,但我仍然可以从代码中访问元素.如何避免泄漏?

我知道在具有大量UI元素的应用程序中正确管理内存并且完全基于Ajax并不容易(在我的应用程序中,页面永远不会重新加载).但我想了解以下行为:

我有一个根元素,一次只能附加一个子元素(将其视为根元素是app容器,子元素是单个页面).每当我在子内容之间切换时,我都会使用jQuery.remove()删除以前的内容,但我发现内容实际上是从DOM中分离出来的,但它仍保留在内存中.

  1. root和两个子内容(child1和child2)
  2. 从child1我切换到child2,要求我的应用程序管理员在附加child2之前删除child1
  3. child2正在附加(我可以看到它)但我仍然可以使用管理child1的代码中的child1元素

child1代码(包含对child1 DOM的引用):

function testaccess(){
   load_and_remove(child2);
   var child1DOM = get_this_dom();
}
Run Code Online (Sandbox Code Playgroud)

child1DOM仍然存在,我可以操作它,好像它仍然附加到DOM.

好吧,我想jQuery.remove()和GC将无法释放内存,直到我有代码可以访问它,但即使我没有调用get_this_dom(),即使退出testaccess(),我看到FF内存不会减少......

当我退出child1时,我想知道如何让GC释放所有内存.

javascript jquery memory-leaks memory-management

9
推荐指数
1
解决办法
6557
查看次数

jQuery 1.3.2中是否有JQuery(..).html()buggy?

这里的代码没有返回预期的内容:

jQuery('<div>Look here: [ jQuery0="null" ]</div>').html()
Run Code Online (Sandbox Code Playgroud)

相反,你得到:

Look here: [ ]
Run Code Online (Sandbox Code Playgroud)

有问题的jQuery源代码:

html: function( value ) {
        return value === undefined ?
                (this[0] ?
                        this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g, "") :
                        null) :
                this.empty().append( value );
},
Run Code Online (Sandbox Code Playgroud)

这背后的动机是.replace什么?我没有时间来讨论jQuery的其余部分,但这样的代码让我想知道我是否应该在生产中使用jQuery.

jquery

8
推荐指数
2
解决办法
934
查看次数

如果我覆盖html,它是否从dom中删除?

想象一下,我有以下代码:

...
<div id="div1">
    <div id="div2">Original div2</div>
</div>

<div id="div3"></div>

...
Run Code Online (Sandbox Code Playgroud)

如果我跑

$('#div1').html('');
$('#div3').html('<div id="div2">New div2</div>');
Run Code Online (Sandbox Code Playgroud)

我最终会遇到问题,因为我没有使用.remove()从dom中删除#div2,或者以这种方式清除html对我这样做了吗?

如果div2包含一些附加了处理程序的javascript,比如说

$('#div2').on('click',function() { ... });
Run Code Online (Sandbox Code Playgroud)

会被删除,还是我需要关闭()它?

jquery dom

6
推荐指数
1
解决办法
306
查看次数

我应该使用卸载事件吗?

我正在制作灯箱,我是否需要使用

$(window.top).unload(function() { .. });
Run Code Online (Sandbox Code Playgroud)

要清理变量,还是所有浏览器都会自动清理所有内容并重置内存,什么不是?

我需要打扰还是浏览器会为我做这件事?什么与所有内存泄漏和所有..

编辑:我将大量数据附加到div元素.所以我需要在卸载时执行removeData吗?

browser memory jquery

3
推荐指数
1
解决办法
1301
查看次数