1 回答
TA貢獻1790條經驗 獲得超9個贊
問題在于以下行:
message_container.innerHTML += msg;
我們使用 Handlebars 生成一個新的 HTML 字符串,并將其存儲到msg變量中。然后我們想要將新的 HTML附加#message_container到DOM 元素。
然而,它并不是message_container.innerHTML += msg簡單地將我們的新 HTML 附加到,而是替換!的所有后代 DOM 節點。#message_container #message_container
發生的情況的細分是:
我們獲取 DOM 中的后代節點
#message_container,并將其字符串化為 HTML 字符串。msg連接到這個新 HTML 字符串的末尾。新的 HTML字符串取代
innerHTML了#message_container.
這里重要的部分是替換。當innerHTMLof#message_container被替換時,它的所有后代節點都被替換。<button>因此,您之前附加偵聽器的所有sonclick都已從 DOM 中刪除。
防止#message_container每次添加 a 時替換所有子級的一種方法<button>是使用Node.appendChild()API。結果代碼如下所示:
// message_container.innerHTML += msg; // TODO: Replace this line with the below.
const node = document.createElement('div');
node.innerHTML = msg;
message_container.appendChild(node);
我創建了一個小提琴供參考。
- 1 回答
- 0 關注
- 231 瀏覽
添加回答
舉報
