簡體   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