假设在我的 webapp 启动之前,我想最初创建所有 dom 元素并将它们存储在一些预加载的数组中。就像是:
for (i = 1...100) { preLoader.push($('<div id="' + i + '" />')); }
然后稍后,根据操作,我将从数组中获取正确的元素并将其附加到 DOM。
现在我的问题是:如果我以后做:
$(div#i).remove()
它还会影响我的 preLoader 数组,还是它与 DOM 中的引用不同?
假设在我的 webapp 启动之前,我想最初创建所有 dom 元素并将它们存储在一些预加载的数组中。就像是:
for (i = 1...100) { preLoader.push($('<div id="' + i + '" />')); }
然后稍后,根据操作,我将从数组中获取正确的元素并将其附加到 DOM。
现在我的问题是:如果我以后做:
$(div#i).remove()
它还会影响我的 preLoader 数组,还是它与 DOM 中的引用不同?
它还会影响我的 preLoader 数组吗
不,它不会。对象将从内存中删除,仅当且仅当没有办法访问它时,即没有对它的引用。之后$('div#'+i).remove()
,您无法从 DOM 访问它,但您仍然可以通过 访问它。因此preLoader[i-1]
您需要从preLoader
数组中显式删除对象:
preLoader.splice(i-1,1);
DOM 中的对象是相同的。如果您想再次重复使用相同的标签,您应该调用
$(div#i).detach();
来自 jquery 文档:
.detach() 方法与 .remove() 方法相同,不同之处在于 .detach() 保留与已删除元素关联的所有 jQuery 数据。当移除的元素稍后要重新插入到 DOM 中时,此方法很有用。
如果您使用 .remove() 您将丢失与被删除的元素相关的事件和数据。但是即使使用 remove() ,您也可以通过再次调用 .appendTo() 来重用相同的元素。
提琴手的示例:http: //jsfiddle.net/sKRCF/1 (对不起警报,这是简单的方法)。