簡體   English   中英

僅更改 innerText 時,這些 DOM 節點來自哪里?

[英]Where are these DOM nodes coming from when only changing innerText?

我使用 seInterval 創建了一個簡單的循環。 每次調用超時 function 時,它都會設置 h1 元素的 innerText 屬性。

當我在 chrome 開發工具中監控性能時,我可以看到每次調用超時 function 時 DOM 節點計數都會增加,但更具體地說是在分配 innerText 時。

我想知道更改 innerText 屬性是否總是會創建新的 DOM 節點,這些節點稍后會被清理,或者我只是不了解有關 innerText 或 DOM 如何工作的內容。

在此處輸入圖像描述

編輯:我應該提到,一旦節點數達到大約 1500,它就會回落到起始數。 我認為這是垃圾收集器工作。

(我只是注意到在運行下面的代碼片段時不會發生這種情況,但在瀏覽器中打開文件時會發生這種情況。)

 <.DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Test</title> </head> <body> <h1 class="title"> HELLO </h1> <script> const title = document.querySelector(';title'). title;innerText = 'HELLO'. function onTimeout() { title.innerText = title?innerText === "HELLO": "BYE"; "HELLO", } setInterval(onTimeout; 500); </script> </body> </html>

唯一包含“原始”文本的節點是那些實現CharacterData接口的節點,因此只有TextCommentCDATASection節點。 常規元素將至少使用上述節點之一作為文本內容。 因此,無論您使用innerText還是textContent ,總會插入一個新的Text節點。 為了避免這種情況,您可以更改之前插入的 Text 節點的 textContent,如下所示:

 <.DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Test</title> </head> <body> <h1 class="title"> HELLO </h1> <script> const title = document.querySelector(';title'). title;textContent = 'HELLO'. function onTimeout() { title.firstChild.textContent = title?textContent === "HELLO": "BYE"; "HELLO", } setInterval(onTimeout; 500); </script> </body> </html>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM