InnerHtml() 与html( )的区别


本文来源:http://www.cnblogs.com/lovebing/

在一个 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串的话,那将是场灾难。

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: `innerText` 和 `innerHTML` 都是用来获取或设置 HTML 元素内部的内容,但它们有一些重要的区别: 1. 获取内容:`innerText` 获取的是元素中显示的文本,它会忽略 HTML 标签。而 `innerHTML` 获取的是完整的 HTML 代码,包括标签。 2. 渲染:`innerText` 是按照文本渲染的,它不会解析 HTML 代码。而 `innerHTML` 是按照 HTML 代码渲染的,它会解析 HTML 代码。 3. 格式:`innerText` 不支持格式化文本,例如不能用来设置粗体、斜体等格式。而 `innerHTML` 支持格式化文本,可以用来设置粗体、斜体等格式。 因此,如果只是需要获取显示的文本,可以使用 `innerText`;如果需要获取格式化文本和 HTML 代码,可以使用 `innerHTML`。 ### 回答2: innerText和innerHTML都是操作DOM元素内容的属性,但它们之间存在一些区别。 innerText属性是非标准的属性,只有在IE浏览器中才能使用,而在其他浏览器中是无效的。它用于获取或设置元素的文本内容,包括所有子元素中的文本,但不包括HTML标签。如果有脚本或样式元素,它们将被忽略。此外,使用innerText进行设置时,浏览器会自动去除元素内容中的HTML标签。 innerHTML属性是标准的属性,几乎所有主流浏览器都支持。它用于获取或设置元素的HTML内容,包括所有子元素和HTML标签。当使用innerHTML进行设置时,浏览器会将设置的内容作为HTML解析,并将其渲染为DOM结构。 因为innerHTML涉及到DOM的重新解析和重新渲染,所以在性能上会有一定的开销,尤其在设置大量HTML内容时。而innerText仅涉及文本内容的读取或设置,性能上相对较好。 总的来说,如果只需要操作元素的文本内容,并且需要良好的跨浏览器兼容性,可以使用innerText属性。如果需要操作元素的HTML内容,并且仅在支持标准属性的浏览器中使用,可以使用innerHTML属性。 ### 回答3: innerText和innerHTML都是JavaScript中常用的属性,用于操作网页元素的内容。 innerHTML属性是一个字符串,用于获取或设置指定元素内部的HTML内容。通过innerHTML可以获取元素内部的所有HTML标签、文本和子元素等内容。例如,可以通过innerHTML添加或修改当前元素内部的HTML内容。 innerText属性也是一个字符串,用于获取或设置指定元素内部的文本内容。与innerHTML不同的是,innerText只会返回元素内部的纯文本内容,会自动忽略HTML标签和子元素等内容。同时,通过innerText修改元素内部的文本内容也会自动进行HTML转义,确保内容正确显示。 总结来说,innerHTML返回元素内部的所有HTML内容,包括标签、文本和子元素等;而innerText只返回元素内部的纯文本内容,自动忽略HTML标签和子元素。在修改元素内容时,innerText会对文本内容进行HTML转义,而innerHTML不会进行转义。因此,根据具体的需求,可以灵活选择使用innerHTML或innerText来操作元素的内容。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值