搜尋
首頁web前端js教程innerText與textContent的差異

innerText與textContent的差異

Jan 16, 2018 am 11:15 AM
javascript

innerText和textContent很多人會很困惑,因為都可以用來取得文字內容,事實上,兩者還是有很多差別的,本文就將介紹這兩個屬性的異同,希望可以對大家的學習有所幫助。

innerText與textContent的差異

一、先前錯誤的認知

innerText IE6就開始支持,那時候,Firefox瀏覽器是不支援這個API的,一直到2016年3月Firefox 45+才開始支援。

innerText與textContent的差異

而textContent IE9瀏覽器才開始支援:

innerText與textContent的差異

由於存在相容性,因此在開發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:

<p id="dom">一段文字内容<span style="position:absolute;">...</span></p>

即時效果如下:

一段文字内容…

可以看到設定了position:absolute<span></span>元素裡面的點點點...和前面的文字內容是緊密連接在一起的,前後沒有任何空格。

但是,當我們分別取得id="dom"<p></p>元素的innerTexttextContent值的時候,有意思的事情發生了,innerText的回傳值居然在點點點前面出現了一個空格。

如下截圖所示:

innerText與textContent的差異

innerTexttextContent表現出了不同,眼見為實,您可以狠狠地點擊這裡:innerText和textContent區別對比demo

為什麼會有這樣的差異呢?

其實是innerText會保留區塊級元素的換行特性,以換行符號呈現。在HTML中,如果white-space不是prepre-wrap則會表現為空格。也就是下圖中的空格其實是換行符:

innerText與textContent的差異

例如,我們設定呈現結果的父元素white-space:pre,則會出現下圖所示的效果:

innerText與textContent的差異

在本例中,雖然<span></span>元素是內嵌元素,但由於設定了position:absolute使其display計算值變成了block,因此,雖然視覺上沒有換行,但innerText取得的時候依舊產生了換行,導致空格出現。

2. 規則差異之隱藏元素的取得與否

已知有下面一段HTML:

<p id="dom2">我后面有一段隐藏文字<span hidden>,就是我啦!</span></p>

此時,我們顯示dom2.innerTextdom2.textContent的傳回值,也會看出差別,如下圖:

innerText與textContent的差異

##可以看到,

display:none元素是無法使用innerText取得的,但是textContent卻可以,無論元素隱藏與否。

您可以狠狠地點選這裡:

innerText與textContent區別對比demo

3. 規則差異之性能與回流

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

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

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

innerText與textContent的差異

另外,与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,性能会更高一点。

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

原文地址:https://www.zhangxinxu.com/wordpress/?p=8941

本文来自 js教程 栏目,欢迎学习!

以上是innerText與textContent的差異的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:zhangxinxu。如有侵權,請聯絡admin@php.cn刪除
Python vs. JavaScript:學習曲線和易用性Python vs. JavaScript:學習曲線和易用性Apr 16, 2025 am 12:12 AM

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

Python vs. JavaScript:社區,圖書館和資源Python vs. JavaScript:社區,圖書館和資源Apr 15, 2025 am 12:16 AM

Python和JavaScript在社區、庫和資源方面的對比各有優劣。 1)Python社區友好,適合初學者,但前端開發資源不如JavaScript豐富。 2)Python在數據科學和機器學習庫方面強大,JavaScript則在前端開發庫和框架上更勝一籌。 3)兩者的學習資源都豐富,但Python適合從官方文檔開始,JavaScript則以MDNWebDocs為佳。選擇應基於項目需求和個人興趣。

從C/C到JavaScript:所有工作方式從C/C到JavaScript:所有工作方式Apr 14, 2025 am 12:05 AM

從C/C 轉向JavaScript需要適應動態類型、垃圾回收和異步編程等特點。 1)C/C 是靜態類型語言,需手動管理內存,而JavaScript是動態類型,垃圾回收自動處理。 2)C/C 需編譯成機器碼,JavaScript則為解釋型語言。 3)JavaScript引入閉包、原型鍊和Promise等概念,增強了靈活性和異步編程能力。

JavaScript引擎:比較實施JavaScript引擎:比較實施Apr 13, 2025 am 12:05 AM

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

超越瀏覽器:現實世界中的JavaScript超越瀏覽器:現實世界中的JavaScriptApr 12, 2025 am 12:06 AM

JavaScript在現實世界中的應用包括服務器端編程、移動應用開發和物聯網控制:1.通過Node.js實現服務器端編程,適用於高並發請求處理。 2.通過ReactNative進行移動應用開發,支持跨平台部署。 3.通過Johnny-Five庫用於物聯網設備控制,適用於硬件交互。

使用Next.js(後端集成)構建多租戶SaaS應用程序使用Next.js(後端集成)構建多租戶SaaS應用程序Apr 11, 2025 am 08:23 AM

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務

如何使用Next.js(前端集成)構建多租戶SaaS應用程序如何使用Next.js(前端集成)構建多租戶SaaS應用程序Apr 11, 2025 am 08:22 AM

本文展示了與許可證確保的後端的前端集成,並使用Next.js構建功能性Edtech SaaS應用程序。 前端獲取用戶權限以控制UI的可見性並確保API要求遵守角色庫

JavaScript:探索網絡語言的多功能性JavaScript:探索網絡語言的多功能性Apr 11, 2025 am 12:01 AM

JavaScript是現代Web開發的核心語言,因其多樣性和靈活性而廣泛應用。 1)前端開發:通過DOM操作和現代框架(如React、Vue.js、Angular)構建動態網頁和單頁面應用。 2)服務器端開發:Node.js利用非阻塞I/O模型處理高並發和實時應用。 3)移動和桌面應用開發:通過ReactNative和Electron實現跨平台開發,提高開發效率。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境