IE6 IE7 IE8 中 getElementsByName 方法的參數(shù)不區(qū)分大小寫

字號:


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