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

a simple syntax wonder: access html object by their global name under IE?

本文关键字:全局 IE 对象 html 访问 通过 一个 简单 奇迹 语法      更新时间:2023-09-26

我通过以下方式访问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。。。

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

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

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

现在,从DOM中删除元素并不意味着该对象将无效。mydiv变量仍然引用DOM对象,该对象不再是DOM的一部分。

以下是您可以做的:

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

现在,mydiv将引用null的值,并且由于null是一个伪值,所以它在执行if (mydiv) 时会起作用

您也尝试过检查style属性吗?

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

若从DOM中删除了节点,你们能展示alert( typeof mydiv )返回什么吗?

编辑:

因此,如果IE8为typeof操作员返回unknown类型,则此检查将有所帮助:

if( typeof mydiv !== 'unknown' )

我认为定义一个变量要好得多

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

但在你的情况下,我想你可以用这个作为变通方法:

if(typeof mydiv != 'undefined') if(mydiv.parentNode) mydiv.style.whatever = "1";