网站首页 > 技术文章 正文
今天看到一段代码,类似 ——
上面代码试图获取节点的文本内容,如果 node.innerText 属性不存在,则使用 node.textContent 获取文本内容。
这段代码虽然不太正确的,但它能体现出很多内容。下面就逐一解析。
textContent 和 innerText 历史
首先,textContent 是最先标准化的,大部分浏览器都支持它,但是在 IE8 或更早的版本不支持。
而 innerText 最初是 IE 上的一个特有属性,后来经过标准化后其他浏览器也支持。
基于上述历史原因, node.innerText || node.textContent 希望对这两个获取文本的属性进行兼容性处理。但是,它的出发点就已经存在问题。
兼容处理的前提是需要 innerText 和 textContent 都是实现同一个功能。但这两个属性在功能就已经存在差异。所以这样的兼容做法是不正确的。
属性的异同
节点属性与元素属性
textContent 存在于所有的 node 节点, innerText 只存在于 HTMLElement 元素节点。
可以看出,文本节点 textNode 上不存在 innerText 属性。
而在获取文本内容上,它们也存在区别。
获取内容的区别
textContent 是基于 nodeValue 获取文本节点,它会返回元素内所有的文本内容。
innerText 是返回渲染后能显示的文本内容。
上述代码中,使用 textContent 可以完整地返回元素内的文本内容,而 innerText 并不会返回隐藏的 hello! 文本。
性能
通过性能比对,可以发现 textContent 比 innerText 快。
原因还是上面所说的,textContent 需要评估元素渲染后的显示状态。
innerText 特殊场景
如果应用 innerText 的节点,它本身不出现在文档流中,那么它就会按照 textContent 的规则去获取文本信息。
结语
对于如何获取节点内的文本内容,其实是一项较复杂的功能,上面只介绍了 textContent 和 innerText 的皮毛。
总结起来,日常需要注意的是:
- textContent 并不等同于 innerText
- textContent 获取节点内的文本内容,innerText 获取元素渲染后的文本内容
猜你喜欢
- 2024-09-14 前端HTML篇--04HTML文本标签(html中的文本标签)
- 2024-09-14 HTML超文本标记语言怎么学?(html超文本标记语言代码)
- 2024-09-14 HTML介绍——入门级(html基础入门)
- 2024-09-14 HTML技巧篇:如何让单行文本以及多行文本溢出显示省略号(……)
- 2024-09-14 HTML基础2019-1-21(html基础选择器)
- 2024-09-14 Python小案例71- HTML基础及语法(python3 html)
- 2024-09-14 4.HTML文本元素(html文档的常用元素)
- 2024-09-14 多行文本控件(富文本框)怎样自动填写?
- 2024-09-14 html基础必备,前端小白一看就会(html前端怎么学)
- 2024-09-14 HTML的一些常用的语法写法(html语法基本结构)
- 1512℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 553℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 503℃MySQL service启动脚本浅析(r12笔记第59天)
- 481℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 479℃启用MySQL查询缓存(mysql8.0查询缓存)
- 459℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 439℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 437℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- chromepost (65)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- checkout-b (67)
- c语言min函数头文件 (68)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)