成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

HTMLElement.innerText 和 Node.textContent傻傻分不清楚?

開發 前端
當我們想要訪問DOM中的文本內容時,肯定會第一時間想到HTMLElement.innerText。事實上,JavaScript 提供了兩個可用于「訪問元素文本內容的」屬性:Node.textContent和HTMLElement.innerText。在大多數情況下,這兩者似乎可以互換。但我們在互換使用它們,往往會忽略兩者之間存在重要區別。

當我們想要訪問DOM中的文本內容時,肯定會第一時間想到HTMLElement.innerText?。事實上,JavaScript 提供了兩個可用于「訪問元素文本內容的」屬性:Node.textContent和HTMLElement.innerText。在大多數情況下,這兩者似乎可以互換。但我們在互換使用它們,往往會忽略兩者之間存在重要區別。

相似之處

我認為在深入研究差異之前確定這兩個屬性的相似之處很有幫助。這也將闡明它們在大多數情況下的使用方式。

假設有一個 HTML 元素,其中包含一些文本:

<p id="greeting">hello<strong>前端南玖</strong></p>

這兩個屬性都將返回元素的文本內容,包括任何子「元素」的文本內容。它們還將忽略元素內容中可能出現的「任何 HTML 標記。」而且,它們也可用于「設置元素的文本內容」。

const greeting = document.getElementById('greeting');

greeting.innerText; // "hello前端南玖"
greeting.textContent; // "hello前端南玖"

greeting.innerText = '小花貓'; // <p id="greeting">小花貓</p>
greeting.textContent = '小細狗'; // <p id="greeting">小細狗</p>

差異

到目前為止,這兩個屬性似乎在做完全相同的事情。事實上,它們都提供了一些非常有用的便利功能。然而,當元素的內容稍微復雜一點時,它們開始表現出一些差異。

以下面的 HTML 元素為例:

<div id="container">
<style>
p { color: red; }
strong { text-transform: uppercase; }
small { display: none; }
</style>
<p>hello<br />我是 <strong>南玖</strong></p>
<small>公眾號 <strong>前端南玖</strong></small>
</div>

<script>
console.log('【innerText】', container.innerText)

console.log('【textContent】', container.textContent)
</script>

讓我們看一下這兩個屬性各自的輸出,看看它們有何不同。

在這種情況下是完全不同的,對吧?HTMLElement.innerText應該大致「匹配用戶」在瀏覽器中看到的內容。另一種思考方式是它的輸出應該與用戶選擇元素的內容并將其復制到剪貼板時得到的結果非常相似。

根據這個定義,首先要注意的是「隱藏的元素被忽略了」。這適用于不呈現的元素,例如<style>和<script>?,也適用于使用 CSS 隱藏的元素。在此示例中,該<small>?元素是隱藏的,因此它不包含在 的輸出中HTMLElement.innerText。

其次, 的輸出HTMLElement.innerText?被「歸一化」。這意味著所有空格都折疊成一個空格,并且所有換行符都替換為單個換行符。如果存在,<br>標簽也會受到尊重,因此它們會被換行符替換。

我想說的最后一點是將「文本轉換」HTMLElement.innerText?應用于元素的內容。在本例中,元素被轉換為大寫,因此 的輸出反映了這一點。<strong>? HTMLElement.innerText

另一方面,Node.textContent?返回元素的「確切文本內容,包括任何空格和換行符。」然而,<br>?標簽在沒有任何替代品的情況下被剝離。它還包括任何隱藏元素的文本內容,例如<style>和<script>并且沒有應用任何文本轉換。

表現

可是等等!還有更多!雖然HTMLElement.innerText看起來是明智的選擇,但它帶有性能問題。為了弄清楚瀏覽器呈現的內容,必須考慮 CSS,觸發重排。這在計算上可能「很昂貴」,并且可能會造成無意的性能瓶頸。

在我看來,一個好的經驗法則是Node.textContent?盡可能使用純文本元素。對于更復雜的元素,請嘗試確定它們如何受布局和用戶交互的影響。例如,只呈現一次且永遠不會改變的復雜元素將是 的用例HTMLElement.innerText,但您可以將輸出存儲在變量中并重新使用它。

結論

HTMLElement.innerText并且Node.textContent是兩個非常相似的屬性,可用于訪問和操作元素的文本內容。但是,它們在一些重要方面有所不同,你應該了解這些差異以選擇最適合您需求的一種。始終檢查你的用例并考慮你的選擇對性能的影響。

  • textContent會獲取所有元素的content,包括<script>和<style>元素或者可以說innerText的值依賴于瀏覽器的顯示,textContent依賴于代碼的顯示
  • innerText返回值會被格式化,而textContent不會。textContent會把空標簽解析成換行(幾個空標簽就是幾行),innerText只會把block元素類型的空標簽解析換行,并且如果是多個的話仍看成是一個,而inline類型的原素則解析成空格
  • innerText 會帶來性能影響(innerText會觸發reflow,而textContent不會)
責任編輯:華軒 來源: 前端南玖
相關推薦

2022-05-15 21:52:04

typeTypeScriptinterface

2021-03-10 08:56:37

Zookeeper

2024-02-29 09:08:56

Encoding算法加密

2021-07-27 07:31:16

JavaArrayList數組

2020-03-03 17:35:09

Full GCMinor

2018-12-17 12:30:05

Kubernetes存儲存儲卷

2020-10-30 08:20:04

SD卡TF卡存儲

2022-02-25 09:14:33

類變量共享實例變量

2023-09-03 21:18:07

Python編程語言

2023-02-27 15:46:19

數據元元數據

2018-05-22 16:24:20

HashMapJavaJDK

2020-11-11 07:32:18

MySQL InnoDB 存儲

2016-11-04 12:51:46

Unix網絡IO 模型

2024-11-04 00:00:03

viewportDOMSPA

2021-11-09 06:01:35

前端JITAOT

2021-02-08 23:47:51

文件存儲塊存儲對象存儲

2025-05-12 08:40:00

前端監控DOM

2019-11-21 14:22:12

WiFiWLAN區別

2021-01-13 08:10:26

接口IEnumeratorIEnumerable

2021-02-14 22:33:23

Java字符字段
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 黄色一级大片在线免费看产 | 国产毛片av | 污片在线免费观看 | 久在线精品视频 | 国产精品美女久久久av超清 | 日韩欧美综合在线视频 | 午夜激情在线 | 国产不卡在线观看 | 欧美日在线 | 久久久久久久91 | 成人在线视频一区 | 6080亚洲精品一区二区 | 国产一区日韩在线 | 91av大全| 96av麻豆蜜桃一区二区 | 亚洲精彩视频在线观看 | 91视频88av| 精品av| 密室大逃脱第六季大神版在线观看 | 国产欧美日韩综合精品一 | 91影院在线观看 | 欧美性猛交一区二区三区精品 | 日韩精品成人一区二区三区视频 | 91婷婷韩国欧美一区二区 | 国产日韩欧美一区二区 | 在线观看成年人视频 | 91精品国产色综合久久 | 97视频免费 | 亚洲综合久久久 | 欧美一级片免费看 | 免费观看的黄色网址 | 日日天天 | 欧美久久一区二区 | 欧美一级一 | 日本欧美国产 | 欧美一级毛片免费观看 | 免费观看视频www | 日韩和的一区二区 | 亚洲高清一区二区三区 | 亚洲一区二区免费电影 | 91视频免费 |