天天看點

IE6使用add方法添加optGroup的bug

合理的使用optGroup元素,可以極大地增強select下拉清單框的表現能力。我是比較喜歡在select中使用optGroup做資料分類的,不過不知道微軟搞什麼飛機,就這麼一個html标簽bug還真是不少。剛才又在使用DOM操作select添加optGroup時發現了問題。

如下簡單的代碼,我們會得到什麼結果呢?

IE6使用add方法添加optGroup的bug

<select id="slt1">

IE6使用add方法添加optGroup的bug

</select>

IE6使用add方法添加optGroup的bug
IE6使用add方法添加optGroup的bug

<script language="javascript">

IE6使用add方法添加optGroup的bug
IE6使用add方法添加optGroup的bug

document.body.onload = function()

IE6使用add方法添加optGroup的bug
IE6使用add方法添加optGroup的bug
IE6使用add方法添加optGroup的bug

{

IE6使用add方法添加optGroup的bug

    for ( var i=0 ; i < 3 ; ++i )

IE6使用add方法添加optGroup的bug
IE6使用add方法添加optGroup的bug
IE6使用add方法添加optGroup的bug
IE6使用add方法添加optGroup的bug

        var group = document.createElement('OPTGROUP');

IE6使用add方法添加optGroup的bug

        group.label = 'group 1-' + i;  

IE6使用add方法添加optGroup的bug

        slt1.add(group);

IE6使用add方法添加optGroup的bug

    }

IE6使用add方法添加optGroup的bug

};   

IE6使用add方法添加optGroup的bug

</script>

按我們對select的add方法的了解,似乎應該得到分組清單框:,但實際上我們得到的清單框卻是:。為什麼會是第二種情況呢

IE6使用add方法添加optGroup的bug

?那麼我們來看看IE DOM操作後生成的Html到底是什麼呢?

IE6使用add方法添加optGroup的bug

<SELECT id=slt1>

IE6使用add方法添加optGroup的bug

    <OPTGROUP label="group 1-0">

IE6使用add方法添加optGroup的bug

        <OPTGROUP label="group 1-2">

IE6使用add方法添加optGroup的bug

        </OPTGROUP>

IE6使用add方法添加optGroup的bug

        <OPTGROUP label="group 1-1">

IE6使用add方法添加optGroup的bug
IE6使用add方法添加optGroup的bug

</SELECT>

這是什麼東東啊?optGroup怎麼又嵌到optGroup裡面去了?optGroup不支援mutli-hierarhical呀!

原來我們必須改用通用的DOM操作方式,即使用appendChild(element)方法才能獲得正确的select清單的分組結構,示例代碼如下:

IE6使用add方法添加optGroup的bug

<select id="slt2">

IE6使用add方法添加optGroup的bug
IE6使用add方法添加optGroup的bug
IE6使用add方法添加optGroup的bug
IE6使用add方法添加optGroup的bug
IE6使用add方法添加optGroup的bug
IE6使用add方法添加optGroup的bug
IE6使用add方法添加optGroup的bug
IE6使用add方法添加optGroup的bug
IE6使用add方法添加optGroup的bug

   for ( var i=0 ; i < 3 ; ++i )

IE6使用add方法添加optGroup的bug
IE6使用add方法添加optGroup的bug
IE6使用add方法添加optGroup的bug
IE6使用add方法添加optGroup的bug

       var group = document.createElement('OPTGROUP');

IE6使用add方法添加optGroup的bug

       group.label = 'group 2-' + i;

IE6使用add方法添加optGroup的bug

       slt2.appendChild(group);

IE6使用add方法添加optGroup的bug

   }

IE6使用add方法添加optGroup的bug
IE6使用add方法添加optGroup的bug

至于add方法的問題,隻能算作optGroup的又一個bug了

本文轉自部落格園鳥食軒的部落格,原文連結:http://www.cnblogs.com/birdshome/,如需轉載請自行聯系原部落客。

繼續閱讀