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