一个简单的语法奇迹:通过IE下的全局名称访问html对象?

时间:2013-08-01 14:55:23

标签: javascript dom internet-explorer-8

我以这种方式访问​​我的DOM对象:

HTML

<div id="mydiv"></div>

的JavaScript

alert(mydiv.style.visibility);

它无处不在,顺畅。 现在我有一种情况,根据一些参数,我从窗口中删除一些元素(1或2):

的JavaScript

if (condition) mydiv.parentNode.removeChild(mydiv);

稍后,仍然在javascript代码中,只有存在与该元素相关的部分:

的JavaScript

if (mydiv) mydiv.style.whatever = "1";

这在IE8下不起作用,它返回“Object不支持此属性或方法” 我也尝试检查undefined,但没有成功[崩溃的部分是if (mydiv)部分!]

最佳解决方案是什么?我不想在任何地方替换我的代码并检查document.getElementById("mydiv") == null ...

3 个答案:

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