繁体   English   中英

在IE上,document.getElementsByName不起作用

[英]On IE document.getElementsByName won't work

我用这个代码:

<div name="1234">
   <img src="pic.gif" height="70" width="100" onMouseOver="clear('1234')">
</div> 

和:

function clear(element_name){
    document.getElementsByName(element_name)[0].innerHTML="";
}

它在Firefox和Opera中都有效,但在IE 6.0或IE 8.0中不起作用,甚至可能在新的IE中也不行。

该怎么办?

嗯,问题是:IE将document.getElementsByName(...)[0]理解为document.getElementById(...)。 因此,如果你还要为你的元素定义一个id,那么方法document.getElementsByName(element_name)[0] .innerHTML =“”也会出现在IE中!

但是,由于你无论如何都需要根据IE定义一个id,并且因为id必须始终以char开头,所以你必须使用:

<div id="a234">
    <img src="pic.gif" height="70" width="100" onMouseOver="clear('a234')">
</div> 

这个命令:

function clear(element_id){
    document.getElementById(element_id).innerHTML="";
}

更重要的是,document.getElementsByName(...)[0]在Firefox中速度较慢: http//www.uize.com/tests/performance/getElementById-vs-getElementsByName.html

所以id绝对赢得了比赛。

更新:

同样重要的是,我们可以在CSS文件中通过#a234 {...}来解析每个id。 所以我们可以为每个id定义一个自己的样式 ,这使得id更加强大。

使用getElementsByName获取DOM元素,其中name属性不是W3C规范的一部分(例如,在问题中,DIV元素不存在名称),IE不会获取这些元素。 FF做到了。
只是为了澄清: expando属性或更好地称为自定义属性是我所说的不属于W3C规范的属性。

阅读: IE7中的getElementsByName
阅读: http//msdn.microsoft.com/en-us/library/ms536438(VS.85).aspx

总之:
在尝试获取“表单控件” (输入,选择,textarea)时使用getElementsByName ,因为它们根据规范将名称作为属性。
如果元素不是表单控件,请改用getElementById。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM