在JavaScript中,在创建元素,然后删除包含变量时,元素是否保留在DOM中?

时间:2010-12-06 12:02:18

标签: javascript dom elements

我有一个从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中?

3 个答案:

答案 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