標準參考
document.getElementsByName(elementName) 方法是 HTMLDocument 接口提供的方法,該方法傳入的參數(shù)應該是目標元素的 name 屬性的值:
NodeList getElementsByName(in DOMString elementName);
目標元素的 name 是一個大小寫敏感的字符串,僅 BUTTON, TEXTAREA, APPLET, SELECT, FORM, FRAME, IFRAME, IMG, A, INPUT, OBJECT, MAP, PARAM, META 元素允許有 name 屬性1,并且 name 屬性可以不是唯一的。
關于 getElementsByName 方法的詳細信息,請參考 DOM-1-HTML Interface HTMLDocument 中的相關內(nèi)容。
關于元素的 name 屬性的詳細信息,請參考 HTML 4.01 Index of Attributes 中的內(nèi)容。
注:
1. 在 IE 中,只有這些標簽有 'name' 屬性時,可以使用 document.getElementsByName(elementName) 方法獲取他們創(chuàng)建的 DOM 元素,但在其他瀏覽器中,有 'name' 屬性的其他標簽也可以用這種方法獲取。即 <DIV name='test'><DIV> 可以在其他瀏覽器中通過使用 document.getElementsByName('test')[0] 來獲取,但在 IE 中卻不行,得到的將是 undefined。
問題描述
使用 document.getElementsByName 方法獲取頁面內(nèi)的元素時,在 IE6 IE7 IE8 中的 name 是大小寫不敏感的。
造成的影響
如果作為參數(shù)的 name 和目標元素的實際 name 的大小寫不匹配,在某些瀏覽器中將無法獲取該元素或者得到的元素與預計得到的元素不一致。
受影響的瀏覽器
IE6 IE7 IE8
問題分析
分析以下代碼:
<input name="aa" type="text" value="input1"/>
<input name="aA" type="text" value="input2"/>
<input name="Aa" type="text" value="input3"/>
<script type="text/javascript">
alert(document.getElementsByName("AA").length);
alert(document.getElementsByName("aa").length);
</script>
以上代碼中,目標元素的 name 分別為 'aa','aA' 和 'Aa',但在傳入 document.getElementsByName 時的參數(shù)分別為 'AA' 和 'aa',在嚴格區(qū)分大小寫的情況下,僅 document.getElementsByName("aa") 能獲得一個 INPUT 元素。
在各瀏覽器輸出如下:
IE6 IE7 IE8其他瀏覽器
3 30 1
可見:在 IE6 IE7 IE8 中,使用 document.getElementsByName 獲取頁面元素時,不區(qū)分參數(shù)的大小寫。
解決方案
在使用 document.getElementsByName 方法獲取頁面元素時,應保證作為參數(shù)的 name 與目標元素的實際 name 值完全一致。
更多信息請查看IT技術專欄