所以我正在编写一个很棒的AJAX控件类,我有点好奇。
让我们为了对话说我在初始化时将我的页面的所有元素添加到一个数组中。
当某人执行启用AJAX的链接时,后续方法会使用从AJAX调用收到的内容替换指定的内容部分。
然而,假设当这个AJAX调用完成并替换内容部分内的节点时,先前存储在数组中的节点现在为null或未定义(或任何表示死...(不是javascript大师) ,显然))。
当我再次遍历数组中的所有节点时会发生什么?这些元素不再存在吗?或者他们仍然在旧索引上占用空间,但现在只是无法访问?
这看起来有点像一个愚蠢的问题,但实际上我只是想看看是否有任何检测和垃圾收集发生在javascript数组中的“死”元素上。
谢谢,干杯。
答案 0 :(得分:2)
如果从活动页面中删除了DOM元素,则对它的引用不会变为null。这些元素将存储在内存中,直到不再存在对元素的引用并且垃圾收集器已经收集了垃圾。
这意味着,如果从父元素中删除这些节点,您将能够使用DOM节点数组来恢复这些节点。
答案 1 :(得分:2)
如果你在javascript中的数组中有一个DOM节点然后从DOM中删除它(例如在你的ajax调用之后),该节点将继续存在于数组中,并继续占用空间。如果愿意,您可以稍后再将其添加到DOM中。
如果你没有再次将它添加到DOM中,而是将数组中的项设置为其他值,例如null或undefined,假设没有对该元素的剩余引用,它将被垃圾收集而不是更长的占用空间。
值得注意的是,javascript数组与NodeList
或HTMLCollection
之间存在差异。您可以通过调用某些DOM方法(例如document.getElementsByTagName
)来获取节点列表。 NodeLists看起来有点像数组,但保持“实时”,因此如果从DOM中删除一个节点,它也将从NodeList
中删除。