8

我使用这段代码:

<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 中也不起作用。

该怎么办?

4

2 回答 2

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="";
}

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

所以 id 肯定会赢得比赛。

更新:

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

于 2013-01-29T04:29:59.347 回答
2

使用getElementsByName获取name属性不属于 W3C 规范的 DOM 元素(例如,在问题中,DIV 元素的 name 不存在),IE 无法获取这些元素。FF 做到了。
澄清一下:expando 属性或更广为人知的自定义属性是我所说的不属于 W3C 规范的属性。

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

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

于 2013-07-04T21:25:27.293 回答