我以这种方式访问我的DOM对象:
<div id="mydiv"></div>
alert(mydiv.style.visibility);
它无处不在,顺畅。 现在我有一种情况,根据一些参数,我从窗口中删除一些元素(1或2):
if (condition) mydiv.parentNode.removeChild(mydiv);
稍后,仍然在javascript代码中,只有存在与该元素相关的部分:
if (mydiv) mydiv.style.whatever = "1";
这在IE8下不起作用,它返回“Object不支持此属性或方法”
我也尝试检查undefined
,但没有成功[崩溃的部分是if (mydiv)
部分!]
最佳解决方案是什么?我不想在任何地方替换我的代码并检查document.getElementById("mydiv") == null
...
答案 0 :(得分:2)
首先,依靠基于ID的全局创建变量是一种非常糟糕的做法,因为这不是标准。
但是,您始终可以自己创建全局变量:
var mydiv = document.getElementById('mydiv');
现在,您从DOM中删除元素的事实并不意味着该对象将被取消。 mydiv
变量仍然引用一个DOM对象,它不再是DOM的一部分了。
以下是您可以做的事情:
if (condition) {
mydiv.parentNode.removeChild(mydiv);
mydiv = null;
}
现在,mydiv
将引用null
值,因为null
是一个假值,它会在执行if (mydiv)
答案 1 :(得分:1)
您是否尝试过检查style
属性?
if (mydiv && mydiv.style) mydiv.style.whatever = "1";
如果节点已从DOM中删除,您能否显示alert( typeof mydiv )
返回的内容?
修改强>
因此,如果IE8为unknown
运算符返回typeof
类型,则此检查应该有所帮助:
if( typeof mydiv !== 'unknown' )
答案 2 :(得分:0)
我认为定义一个变量
总是更好var mydiv = document.getElementById('mydiv');
但是在你的情况下你可以使用它作为一种解决方法我猜:
if(typeof mydiv != 'undefined') if(mydiv.parentNode) mydiv.style.whatever = "1";