我使用此代码:
<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中也不行。
怎么办?
答案 0 :(得分:6)
嗯,问题是: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="";
}
更多,Firefox中的document.getElementsByName(...)[0]速度较慢:http://www.uize.com/tests/performance/getElementById-vs-getElementsByName.html
所以id肯定会赢得比赛。
<强>更新强>
同样重要的是,我们可以在 CSS 文件中通过#a234 {...}添加每个ID。因此,我们可以为每个id 定义自己的样式,这使得id更加强大。
答案 1 :(得分:2)
使用 getElementsByName 获取DOM元素,其中 name 属性不属于W3C规范(例如,在问题中,DIV元素不存在名称),IE没有得到那些元素。 FF做到了。
只是为了澄清: expando属性 或更好地称为 自定义属性 是我所说的属性不是W3C规范的一部分。
阅读:getElementsByName in IE7
阅读:http://msdn.microsoft.com/en-us/library/ms536438(VS.85).aspx
总结如下:
尝试获取“表单控件”(输入,选择,textarea)时,请使用 getElementsByName ,因为根据规范,名称作为属性。
如果元素不是表单控件,请改用getElementById。