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
.
这里重要的部分是替换。当innerHTML
of#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 关注
- 119 浏览
添加回答
举报