• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

jquery innerHTML的缺陷_js

javascript 搞代码 7年前 (2018-06-13) 148次浏览 已收录 0个评论

对于节点的创建innerhtml是一个很高效的接口。jquery在节点操作上使用了innerHTML,创建效率上来说至少比createElement快了2-10倍不等,而且还能一次性生成一堆的节点,但是随之而来就有一些兼容性问题。
我总结了有以下几点,当然兼容上也结合了jQuery的解决方案。

  IE会对用户字符串进行trimLeft操作,用户可能的本意就是需要空白   IE8有些元素innerHTML是只读   IE会忽略开头的无作用域元素   大多情况下不执行script脚本,当然如果支持defer的IE9之前的浏览器除外   一些标签不能作为div的子元素,如tr,tb, col等
 

jQuery的节点操作最终是需要转化成文档碎片也就是要通过buildFragment()方法处理的,所以innerHTML兼容的修复也自然在buildFragment方法中。 我们弄清了缘由再去分析,其实整个修正的代码就很简单了。
  1:首先无作用域的问题,通过文档碎片创建一个div的包含容器,让所有的元素都被div元素给包含起来,包括script,style等无作用域的元素,很好的解决了 tmp = tmp fragment.appendChild(context.createElement("div")); tmp.innerHTML = elem
  2:针对不支持innerHTML属性的元素,给单独提出来,通过正则抽出来这个节点名字去处理 wrapMap = {      tr: [2, "<table><tbody>", "</tbody></table>"], } tag = /<([/w:]+)/.exec(‘<tr>爱思资源网</tr>’) wrap = wrapMap[tag] wrapMap._default; tmp.innerHTML = wrap[1] + elem.replace(rxhtmlTag, "<$1></$2>") + wrap[2]; 如果遇到wrapMap[‘tr’]的标签就会自动包装一层节点,这样达到支持。

欢迎大家阅读jquery innerHTML的缺陷_js,跪求各位点评,若觉得好的话请收藏本文,by 搞代码


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:jquery innerHTML的缺陷_js
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址