博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript操作optgroup的Bug
阅读量:5310 次
发布时间:2019-06-14

本文共 2050 字,大约阅读时间需要 6 分钟。

在 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>

转载于:https://www.cnblogs.com/top5/archive/2011/09/02/2164094.html

你可能感兴趣的文章
Java 定时任务
查看>>
二分查找的平均查找长度详解【转】
查看>>
读阿里巴巴Java开发手册v1.2.0之编程规约有感【架构篇】
查看>>
基于page的简单页面推送技术
查看>>
js 日期格式化函数(可自定义)
查看>>
git报错:failed to push some refs to 'git@github.com:JiangXiaoLiang1988/CustomerHandl
查看>>
Eureka高可用,节点均出现在unavailable-replicas下
查看>>
day 21 - 1 包,异常处理
查看>>
机器学习等知识--- map/reduce, python 读json数据。。。
查看>>
字符串编码
查看>>
预编译语句(Prepared Statements)介绍,以MySQL为例
查看>>
Noip2011提高组总结
查看>>
HDU 4416 Good Article Good sentence(后缀自动机)
查看>>
Java异常之try,catch,finally,throw,throws
查看>>
spring的配置文件详解
查看>>
Spring框架第一篇之Spring的第一个程序
查看>>
操作文件
查看>>
.net core 12
查看>>
SQL-android uri的使用(转载)
查看>>
数字pid笔记(1)
查看>>