我有一个从XML文件异步加载图像src
的脚本。
这些来源稍后被分配到background
的{{1}},div
每5秒更改一次。
它运行良好,但我想预先加载实际图像以显示已加载的图像。
我通过迭代一个数组来做到这一点,为每个源创建一个background
:
img
如果它已经在开发阶段预加载,很难区分,所以我的问题是: 如果我删除或覆盖包含我刚创建的元素的变量,该元素是否保留在DOM中,还是会被删除?
我很确定它仍然存在,但我想问更有经验的开发人员。
我对此感到困惑:
for(var i=0; i < clientLogos.lenght; i++){
var imgHolder = document.createElements("IMG");
imgHolder.src = clientLogos[i];
}
是否将其插入DOM中?
答案 0 :(得分:3)
是。除非您明确删除它或覆盖某个父节点的.innerHTML
属性,否则新创建的元素将保留在DOM中。
删除(“归零”)imgHolder
时,您只删除对该节点的引用。
答案 1 :(得分:2)
它会丢失。访问它的唯一方法是将相同的方法分配给某个新变量,并删除保存它的DOM变量。
答案 2 :(得分:1)
在您的给定示例中,当引用计数将降至0时,将释放元素。必须在写入该变量之前执行appendChild
或类似操作以阻止它。
var imgHolder;
imgHolder = document.createElement("IMG"); // creates and references new Image
imgHolder.src = 'hello.jpg'; // some manip
/* have to save object here by means of inserting into DOM or merely pushing into array */
/* failure to do so tells JS's garbage collector what old object no longer needed */
imgHolder = document.createElement("IMG"); // deletes old image referenced by variable, creates and refs new one