2

希望问题的标题很清楚,但是:

发生以下情况时会发生什么:

 <div id="parent">
      <img src="..." id="myImage"/>
 </div>

 <script>
 var i=document.getElementById('myImage');
 document.getElementById('parent').innerHTML='';
 // variable i should not be 'undefined' right? chrome debugger says nope!
 </script>

我已经在 chromes 调试器中对此进行了测试,即使在 DOM 对象不再存在之后,引用似乎仍然“存在”......我正确吗?执行 console.log(i) (对于上面的示例),仍然返回对象及其所有属性......垃圾收集器是否应该启动并“未定义”这个引用,因为它不再存在于 DOM 中?

有谁知道除了chrome之外的其他浏览器(更具体地说,IE6 ...)如何处理这样的事情?

我问的原因是因为我们全局存储了一些引用(取决于用户操作),以便在用户稍后执行另一个操作时使用......而且我们基本上需要一种方法来测试 DOM 对象是否仍然存在。 .

我创建了一个小 jsfiddle 以使一切清楚:http: //jsfiddle.net/9HCKt/

谢谢。

更新:我现在看到这个问题还不是很清楚......我如何测试这个对象是否仍然存在于 DOM 中以跨浏览器兼容的方式?

4

2 回答 2

2

你的小提琴让事情变得更糟:) 为什么你需要知道移除元素的类型?在它被移除之前它将是对象,之后也是。如果质疑会发生什么:您的元素是Element。你可以用i instanceof Element. 它只是与 DOM 断开连接。您实际上可以在 DOM 的其他或相同位置再次连接它,这将是合法的。如果有疑问如何检查元素是否连接到 DOM:只需检查它是否是父级定义的。

if (i.parentElement) {
   // i connected to DOM
} else {
   // i disconnected
};

想一想:当您添加新元素时document.createElement,您的新元素尚未附加。但显然不是undefined

于 2013-06-07T08:54:39.663 回答
1

如果你可以使用 jQuery,

$(document).has($(i)).length

应该是1ifi还在 DOM 中,0如果不是。

执行 console.log(i) (对于上面的示例),仍然返回对象及其所有属性......垃圾收集器是否应该启动并“未定义”这个引用,因为它不再存在于 DOM 中?

实际上,使用您的i变量,您正在维护对对象的引用,从而防止它被垃圾收集。

于 2013-06-07T08:58:05.623 回答