javascript textContent与innerText的异同分析


Posted in Javascript onOctober 22, 2010

textContent与innerText的不同

IE下有个innerText属性,FF下有个textContent属性。很多以前给IE写脚本的,在FF下找不到innerText属性,于是网上搜到的建议是用textContent来替代。反之给FF写脚本的也一样。

但是实际上,这里有个误解。网上很多文章说“FF下等效于innerText属性的属性是textContent”————但是事实上并非如此。innerText与textContent有几点很重要的不同,导致它们在一些情况下不能直接互换使用。

前些日子写了个代码高亮JS插件,在IE下工作完全正常,而在FF下就不对头。在IE下使用的是innerText属性,而在FF下使用的则是textContent属性。在进行字符串处理的时候二者的不同导致了完全不一样的结果。于是就专门写了点东西来测试二者的不同。

根据测试的结果表明:
innerText:它的内容实际上就是你在浏览器看到的内容。它的值是经过浏览器解释过的结果:它将元素的innerHTML换码、解释,最终显示出来,然后去除各种格式信息留下的纯文本。它会把<br/>换成换行符,会将多个空格并成一个空格对待,而本来的换行符却并不会引起换行,IE会将其当作一个普通的单词边界(一般是空格)。再说的形象点,一个元素的innerText属性的值,和你将这个元素内容复制粘贴到记事本里的内容一致。

textContent:它的内容则是innerHTML去除所有标签后的内容(我怀疑这个是从XMLDOM中照搬过来的属性,特性完全一致)。它会将innerHTML中的转义字符(<、 什么的)进行换码,但是不对任何html标签进行解释,而是直接剔除它们。它也不会对innerHTML中的文本按照HTML的方式进行格式转换,比如多个空格还会原原本本地保留,不会合并为一个空格,换行符仍然存在(相反<br/>却不会导致换行)。

更加简练的总结:IE中的innerText是需要对innerHTML的值进行:
1、HTML转义(等同于XML转义,对<、&等转义字符进行处理);
2、经过HTML解释和CSS样式解释;
3、之后又剔除格式信息
之后留下的纯文本。
而FF中的textContent没有2、3步,在经过了HTML转义之后直接剔除所有html标签后得到的纯文本。

一个例子:

<div id=”T1″> 
ABCD 
EFG HIJ<br/>KLM  N 
OPQ<div>RS</div>T 
T 
<div>

这个id为T1的div,
在IE中的innerText属性的值为:
ABCD EFG HIJ 
KLM N OPQ 
RS 
T T

而在FF中的textContent的属性的值为:
(这里有个换行) 
ABCD 
EFG HIJKLM N 
OPQRST 
T

注意那个div中还嵌套了个div,而这个更能反映IE的innerText和FF的textContent各自的处理方式的不同:
div是块(block)元素,默认会独占一行,因此,在IE中的innerText反映为上述div中的RS独占一行,而FF的textContent完全不理会HTML格式,因此其textContent中的RS是和其它字符连在一起的,不会独占一行。

如果想更进一步,看看这个有趣的结果:
假如给里面那个div加一个style=”float:left;”,那么这个div就会由块元素变化为行元素,不再独占一行,因此IE的innerText属性中RS便不再独占一行,而与其它字符连在一起,而在FF中由于textContent不理会标签更不会理会CSS,因此它的textContent属性的值不会有任何变化。

这么看来,很多网上说的“让FF支持innerText属性”云云,其实都是多多少少有问题的。要实现IE的innerText,远没有想象中的那么简单,你若要使用JavaScript让FF拥有和innerText完全一样的效果,得自己把html标签属性全部parse一遍,解释它们,甚至还需要去解释css……
(不过根据原理,貌似通过剪贴板的复制和取回操作可以在FF下模拟innerText效果(这个未测试),但是1有副作用,2FF下的剪贴板操作也很麻烦。)

不过还好,大多数时候我们并不需要那么精确,使用innerHTML做点简单的处理即可达到比较接近的效果了。

注:以上代码均在IE6和FF3下完成测试。

Javascript 相关文章推荐
javascript学习笔记(十九) 节点的操作实现代码
Jun 20 Javascript
window.open的页面如何刷新(父页面)上层页面
Dec 28 Javascript
简单几行JS Code实现IE邮件转发新浪微博
Jul 03 Javascript
学习JavaScript设计模式之策略模式
Jan 12 Javascript
超实用的JavaScript表单代码段
Feb 26 Javascript
JS实现列表页面隔行变色效果
Mar 25 Javascript
解决Webpack 热部署检测不到文件变化的问题
Feb 22 Javascript
微信小程序自定义组件的实现方法及自定义组件与页面间的数据传递问题
Oct 09 Javascript
electron实现qq快捷登录的方法示例
Oct 22 Javascript
angular多语言配置详解
May 16 Javascript
关于layui 弹出层一闪而过就消失的解决方法
Sep 09 Javascript
详解Vue.js 响应接口
Jul 04 Javascript
js各种验证文本框输入格式(正则表达式)
Oct 22 #Javascript
JavaScript学习点滴 call、apply的区别
Oct 22 #Javascript
Web 前端设计模式--Dom重构 提高显示性能
Oct 22 #Javascript
jQuery中add实现同时选择两个id对象
Oct 22 #Javascript
jquery下动态显示jqGrid以及jqGrid的属性设置容易出现问题的解决方法
Oct 22 #Javascript
为jQuery.Treeview添加右键菜单的实现代码
Oct 22 #Javascript
使用jQuery模板来展现json数据的代码
Oct 22 #Javascript
You might like
咖啡机如何保养和日常清洁?
2021/03/03 冲泡冲煮
PHP 获取客户端真实IP地址多种方法小结
2010/05/15 PHP
PHP 防恶意刷新实现代码
2010/05/16 PHP
PHP、Java des加密解密实例
2015/04/27 PHP
PHP创建文件,并向文件中写入数据,覆盖,追加的实现代码
2016/03/25 PHP
ExtJS GTGrid 简单用户管理
2009/07/01 Javascript
通过js获取div的background-image属性
2013/10/15 Javascript
jquery动态调整div大小使其宽度始终为浏览器宽度
2014/06/06 Javascript
JavaScript拆分字符串时产生空字符的解决方案
2014/09/26 Javascript
正则表达式优化JSON字符串的技巧
2015/12/24 Javascript
jQuery validate插件功能与用法详解
2016/12/15 Javascript
vue实现手机号码抽奖上下滚动动画示例
2017/10/18 Javascript
基于rollup的组件库打包体积优化小结
2018/06/18 Javascript
解决vue this.$forceUpdate() 处理页面刷新问题(v-for循环值刷新等)
2018/07/26 Javascript
微信小程序自定义toast的实现代码
2018/11/16 Javascript
vue列表单项展开收缩功能之this.$refs的详解
2019/05/05 Javascript
vue 移动端注入骨架屏的配置方法
2019/06/25 Javascript
详解小程序横屏方案对比
2020/06/28 Javascript
Python程序语言快速上手教程
2012/07/18 Python
Python中urllib+urllib2+cookielib模块编写爬虫实战
2016/01/20 Python
浅谈python中copy和deepcopy中的区别
2017/10/23 Python
Django Model中字段(field)的各种选项说明
2020/05/19 Python
python获得命令行输入的参数的两种方式
2020/11/02 Python
基于HTML5代码实现折叠菜单附源码下载
2015/11/27 HTML / CSS
HearthSong官网:儿童户外玩具、儿童益智玩具
2017/10/16 全球购物
Funko官方商店:源自美国,畅销全球搪胶收藏玩偶
2018/09/15 全球购物
美国在线购买和出售礼品卡网站:EJ Gift Cards
2019/06/09 全球购物
Invicta手表官方商店:百年制表历史的瑞士腕表品牌
2019/09/26 全球购物
挑战杯创业计划书的写作指南
2014/01/07 职场文书
雪山饭庄的创业计划书范文
2014/01/18 职场文书
优秀党员自我评价范文
2014/09/15 职场文书
2014县委书记四风对照检查材料思想汇报
2014/09/21 职场文书
建筑工地文明标语
2014/10/09 职场文书
公司出差管理制度范本
2015/08/05 职场文书
贷款担保书范本
2015/09/22 职场文书
《蓝鲸的眼睛》读后感5篇
2020/01/15 职场文书