一个简单的语法奇迹:通过IE下的全局名称访问html对象
a simple syntax wonder: access html object by their global name under IE?
我通过以下方式访问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";
相关文章:
- 全局变量和全局对象的属性之间有什么区别吗
- 为什么这在IE中的工作方式与在Firefox中不同
- 正在全局范围中查找JavaScript函数
- 后焦点更改为IE 11中的地址栏,而不是转移到表单中的下一个控件
- delete关键字在全局变量上的不同行为
- 在javascript函数中设置全局变量
- 如何将getJson的响应保存在全局变量中
- 如何在读取XLS/XLSX本地文件时,使用IE的javascript代码启用未标记为安全的ActiveX控件
- 全局对象是属于哪个类的对象
- Javascript全局onclick监听器
- jQuery blueimp文件上传:将N-1个文件上传到IE中的服务器
- 从Javascript方法返回全局变量
- 有没有一种方法可以在控制台关闭的情况下让console.log()在IE中记录消息
- 设置倒计时计时器,IE出现问题
- 仅在IE中,javascript中的时区名称不正确
- 访问jsrender模板中的全局javascript变量并更新它
- 带有全局变量的IE错误.如何绕过此错误
- 一个简单的语法奇迹:通过IE下的全局名称访问html对象
- IE可以't管理“;全局“;变量
- 当事件是全局变量时,JavaScript事件IE问题