惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

C
Check Point Blog
Y
Y Combinator Blog
GbyAI
GbyAI
Microsoft Azure Blog
Microsoft Azure Blog
Martin Fowler
Martin Fowler
博客园_首页
大猫的无限游戏
大猫的无限游戏
美团技术团队
S
SegmentFault 最新的问题
T
The Blog of Author Tim Ferriss
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
MyScale Blog
MyScale Blog
小众软件
小众软件
Vercel News
Vercel News
阮一峰的网络日志
阮一峰的网络日志
N
Netflix TechBlog - Medium
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
量子位
博客园 - 【当耐特】
J
Java Code Geeks
F
Fortinet All Blogs
宝玉的分享
宝玉的分享
Stack Overflow Blog
Stack Overflow Blog
博客园 - 司徒正美

博客园 - Ricebug

android SDK下载及中文API地址 怎么让我们自己开发的Android程序设为默认启动 在android 中开发java.net.SocketException: socket failed: EACCES (Permission denied) 报错 Eclipse 安装中文插件 Android开发环境搭建(jdk+eclip+android sdk) 正则表达式有无g参数时,test()结果的差异 [转载]分享8个超棒的免费高质量图标搜索引擎 平时技巧收集 ActionScript3.0平铺由外部加载的图片 - Ricebug - 博客园 截取中英文字符串 IE处理GIF动画图片onload事件的一个BUG BulkLoader类使用 Asp.net缓存动态图片 JS文件传参及处理技巧 [原创]jQuery动画弹出窗体支持多种展现方式 JQuery上传插件Uploadify使用详解及错误处理 [原创]jQuery插件处女座--超链接滑动动画 js页面定位,相关几个属性 全国哀悼日 网站变灰装(附代码)
JS innerHTML Double Quotes
Ricebug · 2012-02-07 · via 博客园 - Ricebug

通过js的innerhtml来获取一个dom节点,内部的html值时,如果属性值没有空格,则ie左右版本下,都会出现标签大些,双引号丢失问题。如果属性值有空格,则标签会变成大写,引号则正常输出.

当属性值无空格时:
FF3.5.7(gecko/20091221)<div id="div2"></div>

IE6 弹出:<DIV id=div2></DIV>
IE7 弹出:<DIV id=div2></DIV>
IE8 弹出:<DIV id=div2></DIV>

有空格时:
FF3.5.7(gecko/20091221)<div id="div2 "></div>

IE6 弹出:<DIV id="div2 "></DIV>
IE7 弹出:<DIV id="div2 "></DIV>
IE8 弹出:<DIV id="div2 "></DIV>

产生这个BUG的原因是什么呢?

When you get the innerHTML of a DOM node in IE, if there are no spaces in an attribute value, IE will remove the quotes around it.IE's innerHTML doesn't remove quotes from non standard attributes.

即使是jQuery里面,jquery团队的技术人员也没有解决这个问题.

提供下解决方案:

    function ieInnerHTML(obj) { 
         var zz = obj.innerHTML, 
             z =  
           zz.match(/<\/?\w+((\s+\w+(\s*=\s*(?:".*?"|'.*?'|[^'">\s]+))?)+\s*|\s*)\/?>/g); 
          if (z){ 
            for (var i=0;i<z.length;i++){ 
              var y, zSaved = z[i]; 
              z[i] = z[i].replace(/(<?\w+)|(<\/?\w+)\s/, 
                                  function(a){return a.toLowerCase();}); 
              y = z[i].match(/\=\w+[?\s+|?>]/g); 
               if (y){ 
                for (var j=0;j<y.length;j++){ 
                  z[i] = z[i].replace(y[j],y[j] 
                             .replace(/\=(\w+)([?\s+|?>])/g,'="$1"$2')); 
                } 
               } 
               zz = zz.replace(zSaved,z[i]); 
             } 
           } 
          return zz; 
         } 

 在相应的地方调用函数ieInnerHTML

  if(0){ 

      inner_str = ieInnerHTML(obj);

  }else

      inner_str = obj.innerHTML;

  }

原理:对IE版本进行对应的JS处理,而且相应的元素标签中不要出现非标准元素

参考资料:

  1. innerHTML removes attribute quotes in Internet Explorer
  2. innerHTML中的双引号哪去了?

本文引用:http://liupeng.us/how-to-fix-js-innerhtml-double-quotes/