0

假设在我的 webapp 启动之前,我想最初创建所有 dom 元素并将它们存储在一些预加载的数组中。就像是:

for (i = 1...100) { preLoader.push($('<div id="' + i + '" />')); }

然后稍后,根据操作,我将从数组中获取正确的元素并将其附加到 DOM。
现在我的问题是:如果我以后做:

$(div#i).remove()

它还会影响我的 preLoader 数组,还是它与 DOM 中的引用不同?

4

2 回答 2

2

它还会影响我的 preLoader 数组吗

不,它不会。对象将从内存中删除,仅当且仅当没有办法访问它时,即没有对它的引用。之后$('div#'+i).remove(),您无法从 DOM 访问它,但您仍然可以通过 访问它。因此preLoader[i-1]您需要从preLoader数组中显式删除对象:

preLoader.splice(i-1,1);
于 2012-07-28T17:28:02.887 回答
1

DOM 中的对象是相同的。如果您想再次重复使用相同的标签,您应该调用

$(div#i).detach();

来自 jquery 文档:

.detach() 方法与 .remove() 方法相同,不同之处在于 .detach() 保留与已删除元素关联的所有 jQuery 数据。当移除的元素稍后要重新插入到 DOM 中时,此方法很有用。

如果您使用 .remove() 您将丢失与被删除的元素相关的事件和数据。但是即使使用 remove() ,您也可以通过再次调用 .appendTo() 来重用相同的元素。

提琴手的示例:http: //jsfiddle.net/sKRCF/1 (对不起警报,这是简单的方法)。

于 2012-07-28T17:20:29.907 回答