innerText 和 textContent 详解

849 阅读1分钟

什么元素有此属性

innerText 是 Element 的属性

textContent 是 Node 的属性 (比如纯文本节点有textContent,而没有innerText)

返回的内容

  • innerText
    innerText会返回节点中的每一个可见的元素,可见是指其在浏览器中的可见性(当display为none,或者标签为style,script时都不能显示)。内容的排版则是按照HTML元素的排版,根据元素显示的格式来确定空格和换行符。
  • textContent
    textContent 会返回节点中的每一个元素而不考虑其可见性。同时其内容的排版就相当于代码中的排版去除标签内容,缩进换行都能保留。

一个简单的示例如下:

<div>
    text
    <span>visible</span>
    <span style="display: none;">invisible</span>
    <script>
        const a = 1;
    </script>
</div>
el.innerText; 
// "text visible"
el.textContent; 
/*
"
      text
      visible
      invisible
      
        const a = 1;
      
"
*/

性能方面

因为 innerText 只返回可见的元素,因此受到CSS样式的影响,同时其返回字符串的格式(如空格分隔和换行符)也遵循布局的格式。因此可能会触发浏览器的回流重排来确保是最新的计算样式,造成相对较大的性能损耗。

在通常情况下,textContent 要比 innerText 快几十倍。

兼容性

innerText
textContent

都能全部兼容。(IE8不兼容textContent)

来源

MDN

stackoverflow