InnerHtml() 与html( )的区别

在一个 HTML 文档中, 我们可以使用 .html() 方法来获取任意一个元素的内容。 如果选择器匹配多于一个的元素,那么只有第一个匹配元素的 HTML 内容会被获取。

innerHTML 是从对象的起始位置到终止位置的全部内容,包括Html标签

我原本一直以为innerHTML和jquery里的html其实是完全一样的,jquery是多此一举了,直到我遇到一次问题

看个示例:

复制代码 代码如下:

var tbody=document.createElement('tbody');
tbody.innerHTML='<tr><td>IE下tbody的innerHTML是只读的</td></tr>'; //在IE下报错,目标对象错误

现在用jquery的html试试,

复制代码 代码如下:

$(tbody).html('<tr><td>IE下tbody的innerHTML是只读的</td></tr>');

发现IE下用jquery能正确显示了,没任何问题。
后来查阅资料才知道,原来IE下tbody、tr这些的innerHTML都是只读的,不允许写入,而在其他浏览器下则没问题。

而jquery里是用了try,catch来检测,如果报错则在catch里重新调用this.empty().append(value),是通过append来添加字符串的。

jquery 如何使用innerHTML

$("#responsediv") 是个Jquery对象,它Val()是对Value属性赋值对它无意义,Jquery没有innerHTML这个属性,应该这样写$("#responsediv")[0].innerHTML=msg 就可以获得这个Dom对象使用innerHTML。

IE里有些元素的innerHTML是只读的

在IE6,IE7,IE8,IE9里面 col, colGroup, frameSet, html, head, style,table, tBody, tFoot, tHead, title, tr 这几个的innerHTML属性是只读的,不可以赋值,赋值的话就脚本报错。IE10这些标签的innerHTML改成可写的了。

既然在IE6-IE9里这些标签的innerHTML属性是只读的,那么我们尽量避免对这些标签的innerHTML属性赋值,比如说对table的innerHTML可以改为对table父元素(假设是div)的innerHTML属性赋值。

html()函数的优点

看看innerHTML属性的缺点,就知道jQuery中html()函数的优点了,它是兼容所有浏览的,不存在html5标签不支持的问题,不存在href,src属性被转换的问题,不存在某些标签设置不了html串的问题,总之就是一句话,用它基本就万事无忧了,至少功能的实现上是这样。

html()函数的缺点

看来jQuery的html()函数似乎完美无限了,其实不然,它的完美只表现它的功能上,它兼容了所有浏览器,包括IE。但偏偏也是IE,尽管兼容了,性能并不乐观,如果使用html()函数设置大数据量的html串的话,那将是场灾难。

在IE下,html()函数的性能到底低到什么程度?电脑的配置为"i5 四核,8G内存,IE9",测试了用html()函数设置2000行4列的table,其平均耗时达到27秒!具体什么原因导致html()在IE下这么慢,个人粗略看过源码,觉得使用try方式是主要原因之一,有兴趣的同学可以深入研究一下。

最新文章

  1. Java——Swing事件处理
  2. 51nod 1099 任务执行顺序 (贪心算法)
  3. FString的相关文档,另外还有4种LOG的方法
  4. HandlerMethodArgumentResolver数据绑定无效
  5. Jenkins遇到问题二:Jenkins服务器磁盘空间管理策略
  6. 【BZOJ 3036】 绿豆蛙的归宿
  7. ORACLE查询当前资产状态,和另一个数据库联查,(查询重复数据中第一条),子查询作为字段查询
  8. Orchard官方文档翻译(六) 建立你的第一个Orchartd站点
  9. [.Net MVC] 使用 log4net 日志框架
  10. 告诉你KVC的一切-b
  11. 密室经典逃脱N部--考验你的智力!据说全球没几人走出去!不要看攻略!【工作之余也来休闲一下】
  12. chrome调试状态下动态加载的js
  13. MSSQL BACKUP WEBSHELL
  14. Why Study JavaScript?
  15. hdu 5493 Queue treap实现将元素快速插入到第i个位置
  16. 在Core环境下用WebRequest连接上远程的web Api 实现数据的简单CRUD(续)
  17. 关于C#委托的一些学习笔记
  18. XMPP系列(一):OpenFire环境搭建
  19. Redis线程模型
  20. 实现h5中radio单击取消与选中

热门文章

  1. 【容斥原理】【推导】【树状数组】Gym - 101485G - Guessing Camels
  2. bzoj 1269 bzoj 1507 Splay处理文本信息
  3. bzoj 2821 分块
  4. bzoj1003 trans DP
  5. 读书笔记_Effective_C++_条款二十六:尽可能延后变量定义式的出现时间
  6. MongoDB基础学习(一) MongoDB概念解析
  7. 关于利用ajax时,设置访问延时的方法
  8. vultr购买主机前的测速地址
  9. 支持Tasker控制的app合集
  10. redis的主从配置 扩容