zoukankan      html  css  js  c++  java
  • JavaScript操作optgroup的Bug

    在 html里,optgroup这个元素对于我来说很少用到。最近在公司做项目时使用了一下,感觉不错,可以对数据进行分类。但在使用JavaScript 添加optgroup时,在IE与Firefox下分别出现了不同的Bug。为了今后再遇到这问题,发到这里作为备忘用。

    我们先看以下代码:

    1. window.onload = function () {
    2. var selObj = document.getElementById('demo');
    3. var optionGroupObj = document.createElement('optgroup');
    4. optionGroupObj.label = 'optionGroup';
    5. selObj.appendChild(optionGroupObj);
    6. var optionObj = new Option('optionText','optionValue');
    7. selObj.options[selObj.options.length] = optionObj;
    8. }
    9. <select id="demo">
    10. <option value="-1">please select</option>
    11. </select>

    在IE下显示的结构是:

    1. <SELECT id=demo>
    2. <OPTION value=-1 selected>please select</OPTION>
    3. <OPTGROUP label=optionGroup>
    4. <OPTION value=optionValue>optionText</OPTION>
    5. </OPTGROUP>
    6. </SELECT>

    而在Firefox下显示的结构却是:

    1. <select id="demo">
    2. <option value="-1">please select</option>
    3. <optgroup label="optionGroup"/>
    4. <option value="optionValue">optionText</option>
    5. </select>

    从这段代码看起来,没有任何问题。在IE下,把optgroup作为option父结点,这是正确的。而Firefox却把optgroup作为option的兄弟结点,这显然不是我们所要的结果。

    于是,又尝试着用标准DOM的操作方式进行改写。

    将第7行代码改成“optionGroupObj.appendChild(optionObj);”

    在IE下显示的结构是:

    1. <SELECT id=demo>
    2. <OPTION value=-1 selected>please select</OPTION>
    3. <OPTGROUP label=optionGroup>
    4. <OPTION value=optionValue></OPTION>
    5. </OPTGROUP>
    6. </SELECT>

    Firefox正常了。但在IE下,在option元素却没有’optionText’显示文本。

    最后,改写成如下代码,解决了这个Bug。

    完整代码如下:

    1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    2. <html>
    3. <head>
    4. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    5. <title>optgroup Bug</title>
    6. <script type="text/javascript">
    7. window.onload = function (){
    8. var selObj = document.getElementById('demo');
    9. var optionGroupObj = document.createElement('optgroup');
    10. optionGroupObj.label = 'optionGroup';
    11. selObj.appendChild(optionGroupObj);
    12. var optionObj = new Option();
    13. optionObj.value = 'optionValue';
    14. optionObj.innerHTML = 'optionText';
    15. optionGroupObj.appendChild(optionObj);
    16. }
    17. </script>
    18. </head>
    19. <body>
    20. <select id="demo">
    21. <option value="-1">please select</option>
    22. </select>
    23. </body>
    24. </html>
  • 相关阅读:
    读后感
    周总结(五)【2019.7.292019.8.4】
    周总结(六)【2019.8.52019.8.11】
    “教室派”APP使用体验
    ios的内存管理差异和iso6与以前内存管理的兼容
    UITextView 和UILable 设置行间距
    IOS 各种问题收藏贴
    __bridge,__bridge_transfer和__bridge_retained
    键盘事件的处理
    JSONKit 使用示例
  • 原文地址:https://www.cnblogs.com/top5/p/2164094.html
Copyright © 2011-2022 走看看