0

我以这种方式访问​​我的 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 下不起作用,它返回“对象不支持此属性或方法”我也尝试检查undefined,但没有成功 [崩溃的部分是if (mydiv)部分!]

什么是最好的解决方案?我不想到处替换我的代码并检查document.getElementById("mydiv") == null...

4

3 回答 3

2

首先,依赖基于 ID 的全局创建变量是一种非常糟糕的做法,因为这不是标准。

但是,您始终可以自己创建全局变量:

var mydiv = document.getElementById('mydiv');

现在,您从 DOM 中删除元素这一事实并不意味着该对象将被取消。该mydiv变量仍然引用一个 DOM 对象,它不再是 DOM 的一部分。

以下是您可以执行的操作:

if (condition) {
    mydiv.parentNode.removeChild(mydiv);
    mydiv = null;
}

现在,mydiv将引用该null值,因为null它是一个虚假值,所以它会在做if (mydiv)

于 2013-08-01T15:04:48.110 回答
1

你也试过检查style财产吗?

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

alert( typeof mydiv )如果从 DOM 中删除节点,你能显示什么返回吗?

编辑:

因此,如果操作员的 IE8 返回unknown类型,typeof此检查应该会有所帮助:

if( typeof mydiv !== 'unknown' )
于 2013-08-01T14:57:38.527 回答
0

我相信定义一个变量总是更好的,

var mydiv = document.getElementById('mydiv');

但在你的情况下,我猜你可以使用它作为一种解决方法:

if(typeof mydiv != 'undefined') if(mydiv.parentNode) mydiv.style.whatever = "1";
于 2013-08-01T15:26:11.663 回答