1 回答

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