[英]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.