1. 程式人生 > >知道這兩個 DOM 屬性區別的,頭髮應該不多了吧?

知道這兩個 DOM 屬性區別的,頭髮應該不多了吧?

你可能知道,獲取和設定 DOM 元素內部文字可以用這兩個屬性:`Node.textContent` 和 `Element.innerText`。 乍一看,它們似乎做著完全相同的事情,但它們之間有一些微妙但重要的區別。今天,我們來看看它們的作用,以及它們的異同之處。 廢話不說,直接看程式碼。 ## 相同之處 比如下面這個 DOM 元素。 ```

I love a good tuna sandwich!

``` `Node.textContent` 和`Element.innerText`屬性都能獲取`#sandwich` 元素內部的文字。 ``` let sandwich = document.querySelector('#sandwich'); // returns "I love a good tuna sandwich!" let text1 = sandwich.textContent; // also returns "I love a good tuna sandwich!" let text2 = sandwich.innerText; ``` 如果元素內部還有其他標籤,它們都會忽略。 ```

I love a good tuna sandwich!

``` ``` // returns "I love a good tuna sandwich!" let textHTML1 = sandwich.textContent; // also returns "I love a good tuna sandwich!" let textHTML2 = sandwich.innerText; ``` 另外,這兩個屬性都能用於設定元素內部文字。 ``` // 替換文字 //

Hello, world!

sandwich.textContent = 'Hello, world!'; // 也可以追加 //

Hello, world! And hi, Universe!

sandwich.innerText += ' And hi, Universe!'; ``` ## 不同之處 看上去做著同樣的事情,那麼它們有什麼區別? - `Node.textContent` 屬性獲取**全部**文字內容,包括元素內部那些未渲染到頁面的內容。 -  `Element.innerText` 只返回渲染出來的文字,類似於可以用游標和鍵盤選中的文字部分。 舉個例子就清楚了。 ```

Hello world!

``` ``` let greeting = document.querySelector('.greeting'); /* 返回 p {color: rebeccapurple;} This is not rendered. Hello world! */ let text1 = greeting.textContent; // 返回 "Hello world!" let text2 = greeting.innerText; ``` 這下總算知道區別了!又躺學了一個知識點~ 本文首發於公眾號 1024譯站 ![](https://img2020.cnblogs.com/blog/121167/202009/121167-20200914095203786-71350