js text 和 html,JS DOM innerText和textContent的区别

innerText和textContent很多人会困惑,因为都可以用来获取文本内容,实际上,两者还是有很多区别的,本文就将介绍这两个属性的异同,希望可以对大家的学习有所帮助。

6ce2782ca427d62f6790157678ce83a3.png

一、之前错误的认识

innerText IE6就开始支持,那个时候,Firefox浏览器是不支持这个API的,一直到2016年3月份Firefox 45+才开始支持。

f7195705b0f80a21f8dff861e054f0fd.png

而textContent IE9浏览器才开始支持:

74a014814783e304c0b71c25b91b8c33.png

由于存在兼容性,因此在开发PC端项目的时候获取元素的文本内容都是下面的语句:var text = dom.innerText || dom.textContent;

久而久之,就误认为innerText和textContent作用是一样的。

最近一次实践突然让我发现,娘啊,原来innerText和textContent是有区别的,这种区别小萌新反而容易知道(因为会疑惑为何会有两个API),而我这样深受兼容性问题影响的大叔反而注意不到(以为是IE的文本获取API和Firefox的文本获取API互相支持)。

究竟区别在哪里呢?我们看几个例子就知道了。

二、innerText和textContent的不同

不同之一,调用对象不同。innerText只有HTML元素才可以调用,但是textContent任意Node节点都可以:HTMLElement.innerText和Node.textContent。

不同之二,值获取规则不同。

1. 规则差异之块级元素与换行符

已知有下面一段HTML:

一段文字内容...

实时效果如下:一段文字内容…

可以看到设置了position:absolute的元素里面的点点点...和前面的文字内容是紧密连接在一起的,前后没有任何空格。

但是,当我们分别获取id="dom"的

元素的innerText和textContent值的时候,有意思的事情发生了,innerText的返回值居然在点点点前面出现了一个空格。

如下截图所示:

e5092d23a3a3082bdc06fc063b26e351.png

innerText和textContent表现出了不同,眼见为实,您可以狠狠地点击这里:innerText和textContent区别对比demo

为什么会有这样的差异呢?

实际上是innerText会保留块级元素的换行特性,以换行符形式呈现。在HTML中,如果white-space不是pre或pre-wrap则会表现为空格。也就是下图中的空格实际上是换行符:

ac8a3c35baded4c32849adfd1f314ca8.png

例如,我们设置呈现结果的父元素white-space:pre,则会出现下图所示的效果:

11dd9c901515e924b4701371aa391c1a.png

在本例中,虽然元素是内联元素,但由于设置了position:absolute使其display计算值变成了block,因此,虽然视觉上没有换行,但innerText获取的时候依旧产生了换行,导致空格出现。

2. 规则差异之隐藏元素的获取与否

已知有下面一段HTML:

我后面有一段隐藏文字,就是我啦!

此时,我们显示dom2.innerText和dom2.textContent的返回值,也会看出区别,如下图所示:

8649b9b0b13e6b4ca946b495121e428b.png

可以看到,display:none元素是无法使用innerText获取的,但是textContent却可以,无论元素隐藏与否。

3. 规则差异之性能与回流

此外,由于innerText属性值的获取会考虑CSS样式,因此读取innerText的值将触发回流以确保计算出的样式是最新的,而回流在计算上很昂贵,会降低性能,因此应尽可能避免回流。而textContent只是单纯读取文本内容,因此性能更高。

4. IE浏览器不符合上面规则

但是在IE浏览器下,innerText的表现和规范是不符的,最终表现为textContent属性一样的效果,也就是没有空格,也不会不显示隐藏元素,例如下面IE11下的效果截图:

a16ac7043144a6d469df9a5c113a9cf4.png

另外,与textContent不同,在Internet Explorer(版本11及以下)中更改innerText将从元素中移除子节点,并永久销毁所有子文本节点。不可能再将节点插入任何其他元素或同一元素中。

三、最后的结论

innerText由于存在诸多特别的特性、以及兼容性差异,以及性能方面问题,以及实际开发的需求的考量,不推荐使用,推荐使用textContent获取文本内容。var text = dom.textContent;

如果你的项目还需要兼容IE8浏览器,则使用下面的代码:var text = dom.textContent || dom.innerText;

四、三言两语的结语

没想到innerText包含的细节这么多。innerHTML是高频使用属性,没想到原本以为相对应也会高频使用的innerText居然这么有故事,地位被textContent取代了,就像小说里的故事一样,总是出乎意料。

另外,如果你要在一个DOM元素中改变文字内容,推荐使用textContent,而不是innerHTML,性能会更高一点。

好了,就说这么多,一个小小的研究,希望能够对大家的学习有所帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/339115.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何用耳机翻页_游戏耳机的经典之作—罗技(G)Astro A40体验

前言经常去网吧玩游戏的朋友,在家玩如果没有头戴式耳机,那体验真的会差一大截。优秀的电竞游戏耳机会带来更好的游戏体验,不仅是舒适性。像绝地求生这类FPS游戏,游戏耳机会让听声辩位更容易更精确。最近因为大促降价入手的罗技&am…

我改了500个Bug,但是!!

IT程序猿 微博网友评论:空白一页blank:不写bug怎么改bug 抠Bee:不经意间病毒都出来了我在海的这边你在哪里丫:好了,发给开发小弟了富贵小小神仙:要不然呢,那些从开发到维护的程序员不都是靠这么…

jboss maven_使用Maven配置JBoss / Wildfly数据源

jboss maven大多数Java EE应用程序在其业务逻辑中使用数据库访问,因此开发人员经常面临在应用程序服务器中配置驱动程序和数据库连接属性的需求。 在本文中,我们将使用Maven为JBoss / Wildfly和Postgre数据库自动化该任务。 这项工作是根据我从以前的魔兽…

globalmapper如何选取图像上的点_OpenCV 进阶应用,用编程手段搞定图像处理

在我们生活中,常见的图像处理软件有Adobe Photoshop、Adobe Illustrator等。然而,并非只有软件才能实现图像处理,通过编程手段也是能实现的!通过编程手段实现图像处理,也就是计算机视觉。所谓计算机视觉,就…

pytorch relu函数实现_什么是pytorch?

PyTorch是一个:机器学习框架,简单易学可以看做是支持GPU计算和自动微分计算的“Numpy”库支持100多种Tensor常规算子,包括:创建、索引、切片、转置、连接、随机数、形状改变,线性代数、数学计算Tensor是一个有值有属性…

C sort 排序函数用法

最近在刷ACM经常用到排序,以前老是写冒泡,可把冒泡带到OJ里后发现经常超时,所以本想用快排,可是很多学长推荐用sort函数,因为自己写的快排写不好真的没有sort快,所以毅然决然选择sort函数用法1、sort函数可…

python人脸_Python 使用 face_recognition 人脸识别

Python 使用 face_recognition 人脸识别 人脸识别 face_recognition 是世界上最简单的人脸识别库。 使用 dlib 最先进的人脸识别功能构建建立深度学习,该模型准确率在99.38%。 Python模块的使用 Python可以安装导入 face_recognition 模块轻松操作,对于简…

osgi 如何引入包_OSGi Testsuite:引入类名过滤器

osgi 如何引入包OSGi Testsuite是一个JUnit测试运行程序 ,它动态地收集要执行的测试类。 它已经由我的同伴Rdiger大约一年前出版,并且已经在某些项目中证明有用。 但是对于gonsole,我们必须使用一个难看的补丁,因为1.0版仅支持.*T…

C语言,一把菜刀。

C 与 C 的真正区别在哪里?C是中餐厨师的菜刀,做啥菜就那一把刀,切菜切肉切鱼,都是这一把刀,刀工好的师傅,豆腐都能切成一朵花。无论你提什么概念,都能用指针给你做出来,如果不行&…

查询计算机专业及选修了英语的学生,实验五 数据库综合查询(学生)

实验五 数据库综合查询一、实验目的1. 掌握SELECT语句的基本语法和查询条件表示方法; 2. 掌握查询条件种类和表示方法; 3. 掌握连接查询的表示及使用; 4. 掌握嵌套查询的表示及使用; 5. 了解集合查询的表示及使用。二、实验内容1.…

python读取写入文件_Python文件读写保存操作

记录下第一次使用Python读写文件的过程,虽然很简单,第一次实现其实也有些注意的事项。 单个文件的读操作: 我们先假设一个需求如下: 读取一个test.txt文件 删除指定字符之前的文本 需求明白之后,下面开始动手写代码&am…

css中设置br标签之后的样式_CSS学习

语法:选择器,声明(由一个属性和一个值)注释:/* */选择器:1. id选择器,class选择器2. 组和选择3. 属性选择创建:外部样式表html <head> <link rel"stylesheet" type"text/css" href"mystyle.css"> </head>内部样式表html <h…

eclipse扩展点_Eclipse扩展点评估变得容易

eclipse扩展点编码Eclipse扩展点评估有点冗长&#xff0c;而且很少能自我解释。 当我最近忙于自己忙于这个话题时&#xff0c;我写了一个小助手&#xff0c;目的是减少通用编程步骤的样板代码&#xff0c;同时增加开发指导和可读性。 它原来是不容易找到一个表现的解决方案&am…

扯淡!C语言怎么可能被淘汰呢?

“第一门编程语言学C靠谱吗&#xff1f;”“C还有未来吗&#xff1f;”“我应该考虑学C吗&#xff1f;”“C太老了吧&#xff01;”你是否也听过类似的话语&#xff1f;听说过无数次&#xff0c;有些是面对面的交谈&#xff0c;而有些来自某个论坛。虽然答案无非是“取决于具体…

如何正确运用计算机技术,如何正确认识与运用计算机网络技术.doc

如何正确认识与运用计算机网络技术如何正确认识与运用计算机网络技术摘要&#xff1a;正如每个人所见&#xff0c;在中国当前的形势下&#xff0c;从小培养计算机网络技术人才还是个薄弱环节。作为中小学计算机网络技术教师的我们必须在透彻了解本校或本地区学生对计算机网络技…

google账号解除游戏绑定_附方法!关于物联卡手机号的绑定与解绑

我们在使用物联卡时第一步都知道绑定手机号&#xff0c;只有绑定了手机号我们才能进行正常的充值、续费、查询等日常操作&#xff0c;当我们不再使用这些物联卡时&#xff0c;你知道怎么解绑吗&#xff1f;今天&#xff0c;我们以中国移动物联卡为例&#xff0c;咱们来看一下移…

elasticsearch原理_花几分钟看一下Elasticsearch原理解析与性能调优

基本概念定义一个分布式的实时文档存储&#xff0c;每个字段 可以被索引与搜索一个分布式实时分析搜索引擎能胜任上百个服务节点的扩展&#xff0c;并支持 PB 级别的结构化或者非结构化数据用途全文检索结构化搜索分析VS传统数据库传统数据库提供精确匹配ES提供精确匹配全文检索…

spark wai_WAI-ARIA对自动完成小部件的支持

spark wai在这篇文章中&#xff0c;我想讨论一个AutoComplete小部件的可访问性。 在您键入该字段时&#xff0c;通常会使用“自动完成”窗口小部件提供建议。 在当前的工作中&#xff0c;我基于Twitter的Typeahead &#xff08;一个灵活JavaScript库&#xff09;实现了JSF组件&…

快速学习C语言的途径,让你少走弯路!

1标准C语言能干什么&#xff1f;坦白讲&#xff0c;在今天软件已经发展了半个多世纪&#xff0c;单纯的C语言什么都干不了。标准C语言库只提供了一些通用的逻辑运算方法以及字符串处理&#xff0c;当然字符串在C语言看来也是一种操作内存的方法&#xff0c;所以单纯的C什么都做…

计算机基础教育学,计算机基础教育教学改革与创新

计算机基础教育教学改革与创新伴随《国家中长期教育改革和发展规划纲要(2010-2020)》的颁布,我国计算机基础教育进入一个新的发展阶段,对计算机基础教育"面向应用、能力导向、注重素质"指导思想的深入研究和实践是深化计算机基础教育教学改革的切入点。下面是小编搜集…