在ie下面使用innerHTML来插入option选项的话,ie会去掉前面的<option>,并拆分成多个节点,这样会造成select的出错
 

前言:
这是一个老bug了,现在提供一个完美解决方案。由于我一直是用createElement来创建动态的option并添加,所以一直没
有遇到这个问题,但是每个人写代码风格不同,有的人就喜欢写字符串形式的标签并用innerHTML插入,这不就有问题了,为了方便不同编码风格的人,我
封装了一个方法,用于解决ie的这个bug和兼容5大浏览器,这样大家都可以用一个方法来实现不同的风格,便于维护管理。

bug描述:

ie下面使用innerHTML来插入option选项的话,ie会去掉前面的<option>,并拆分成多个节点,这样会造成select
的出错,不是没有插进去,而是节点在转换时出问题了,微软对这个bug也有描述,并提供了两个解决方案,大家可以自己搜索一下,我大概提下微软的两个方
案。
1,使用createElement,这个是正规渠道,要出错还真有问题了。
2,插入完整的select字符串,到div中。

实现:
  原理:
  既然是使用innerHTML的人,肯定是想用字符串来插入option了,这里主要就是解决这人人群,当然你也可以传入createElement对象来插入。
  对于传入的参数会做个判断,看是elementObj还是字符串,如果是elementObj那么就使用标准的add方法加入,并做兼容处理。如果是字符串则使用div包装完整的select并转换成dom对象用appendChild来加入。

  注意:
  b$.type.isElement(arg)是bBank里面用来判断对象是否是element元素的方法
  b$.browser.isIE()是bBank里面用来判断是否是ie的方法
  b$.parseDom(str)是bBank里面用来转换字符串为标准dom的方法,在我前面的博客中有专门讲解
  bBank 框架介绍:http://www.cnblogs.com/bruceli/archive/2010/04/15/bBank.html

复制代码 代码如下:
      var sltObj=document.getElementById('xx');//获取select对象,这里只是给个例子,可以按自己习惯来获取
      function addOption(obj, arg) {
if (b$.type.isElement(arg)) {
if (b$.browser.isIE()) obj.add(arg);
else obj.add(arg, null);
return;
}
var str = '<select>' + arg + '</select>';
var slt = b$.parseDom(str)[0];
for (var i = 0, num = slt.length; i < num; i++) {
obj.appendChild(slt[0]);
}
};

  使用:

复制代码 代码如下:
    addOption(sltObj, '<option>a</option>');

END
到这里就结束了,在这里向大家推荐一个我自己写的js框架,上面的这个方法集成在框架里面了
使用:b$('obj').addOption(arg);

最新文章

  1. 【转】使用Reflector和FileDisassembler反编译成项目文件
  2. 给angularJs的service建模
  3. 为Page添加INotifyPropertyChanged功能
  4. struts2 详解
  5. Flask-SQLAlchemy 学习总结
  6. Diagram of Spring 3.0 module dependencies--转载
  7. Swift入门(十一)——类型转换与is、as操作
  8. 《sed的流艺术之三》-linux命令五分钟系列之二十三
  9. JVM内存管理基本概念
  10. Android混淆、反编译以及反破解的简单回顾
  11. 我的经常使用linux小命令
  12. 使用 WPF 实现所见即所得HTML编辑器
  13. junit设计模式--适配器模式
  14. sips 命令(iMac 下系统自带)
  15. mysql 利用druid 为访问密码加密
  16. 实现upnp ssdp来查找局域网内的其他节点
  17. &lt;4&gt;Python切片功能剖析
  18. 关于下拉列表HtmlDownlistFor的使用
  19. 转载及总结:cron表达式详解,cron表达式写法,cron表达式例子
  20. Paper Read: Convolutional Image Captioning

热门文章

  1. SharePoint 会话(Session)状态和状态服务
  2. STL标准库-迭代器适配器
  3. Nexus设备渗透测试平台 – Kali Linux NetHunter
  4. iOS plist文件的读写
  5. 使用Nginx实现灰度发
  6. POJ 2367:Genealogical tree(拓扑排序模板)
  7. (转)typedef和define的详细区别
  8. Struts2重学习之作用域的获取
  9. JAVA关闭钩子
  10. webpack externals