请注意,Element::innerText 属性将不包含在 Google Chrome 中被 CSS 样式“display:none”隐藏的文本(同时它会丢弃已被其他 CSS 技术(包括 font-size:0、color:transparent 和其他一些导致文本不以任何可见方式呈现的类似效果)。
还考虑了其他 CSS 属性:
- 首先解析内部元素的“display:”样式以确定它是否分隔块内容(例如“display:block”,这是浏览器内置样式表中 HTML 块元素的默认设置,其行为不是被您自己的 CSS 样式覆盖);如果是这样,将在 innerText 属性的值中插入一个换行符。 textContent 属性不会发生这种情况。
- 还会考虑生成内联内容的 CSS 属性:例如,生成内联换行符的内联元素
<br \> 也会在 innerText 的值中生成一个换行符。
- “display:inline”样式不会导致 textContent 或 innerText 中的换行符。
- “display:table”样式会在表格周围和表格行之间生成换行符,但“display:table-cell”会生成制表符。
- “position:absolute”属性(与 display:block 或 display:inline 一起使用,没关系)也会导致插入换行符。
- 某些浏览器还会在跨度之间包含一个空格分隔
但Element::textContent 仍将包含独立于应用的 CSS 的内部文本元素的所有内容,即使它们是不可见的。并且 textContent 中不会生成额外的换行符或空格,它只会忽略所有样式以及内部元素的结构和内联/块或定位类型。
使用鼠标选择的复制/粘贴操作将丢弃以纯文本格式放入剪贴板的隐藏文本,因此它不会包含textContent 中的所有内容,而只会包含innerText 中的内容(如上所述在生成空格/换行符之后)。
这两个属性在 Google Chrome 中都受支持,但它们的内容可能会有所不同。较旧的浏览器仍然包含在 innetText 中的所有内容,例如 textContent 现在包含的内容(但它们与当时生成的空格/换行符相关的行为不一致)。
jQuery 将使用“.text()”方法解决浏览器之间的这些不一致问题,该方法添加到它通过 $() 查询返回的已解析元素中。在内部,它通过查看 HTML DOM 解决了困难,仅使用“节点”级别。所以它会返回一些看起来更像标准 textContent 的东西。
需要注意的是,这个 jQuery 方法不会插入由内容的子元素(如 <br />)引起的屏幕上可能可见的任何额外空格或换行符。
如果您为可访问性设计了一些脚本,并且您的样式表被解析为非听觉呈现,例如用于与盲文阅读器通信的插件,则此工具应使用 textContent 如果它必须包含添加的特定标点符号spans 样式为“display:none”,通常包含在页面中(例如上标/下标),否则 innerText 在盲文阅读器上会非常混乱。
使用 HTML/CSS 解析器和DOM 属性 "innerText" 与现代视觉浏览器中的完全一样(至少这种不可见的内容不会被索引,因此隐藏的文本不能用作强制在页面中包含某些关键字以检查其内容的技巧);但是这个隐藏的文本仍然会显示在结果页面中(如果页面仍然符合索引以包含在结果中),使用“textContent”属性而不是完整的 HTML 来去除额外的样式和脚本。
如果您在这两个属性中的任何一个中分配了一些纯文本,这将覆盖应用到它的内部标记和样式(只有分配的元素会保留其类型、属性和样式),因此两个属性都将包含相同的内容。但是,一些浏览器现在将不再支持对 innerText 的写入,并且只会让您覆盖 textContent 属性(在写入这些属性时,您不能插入 HTML 标记,因为 HTML 特殊字符将使用数字字符引用正确编码以按字面意思显示,如果您在分配innerText 或textContent 之后读取innerHTML 属性。