【发布时间】:2022-11-14 12:18:12
【问题描述】:
我有一个<ul> 列表,其中包含一些<li> 元素,并且我为每个元素添加了一个click 事件侦听器,以将单击的项目移动到列表顶部。
function add_event_listeners() {
let elements = my_list.getElementsByTagName('li');
for (let item of elements) {
item.addEventListener("click", send_to_top);
}
}
function send_to_top() {
this.parentElement.children[0].insertAdjacentElement('beforebegin', this);
}
这段代码工作正常,直到我删除或添加一个新的li 到列表中,所有事件侦听器都被删除,之后的点击不起作用。
什么是正确的事件侦听器来检测新元素已从列表中添加或删除?那么之后我可以使用它来运行add_event_listeners() 函数吗?
基于 MDN 上的 HTMLCollection 文档:
HTML DOM 中的
HTMLCollection是活动的;它会自动更新 当基础文档更改时。出于这个原因,这是一个很好的 如果添加,制作副本的想法(例如使用Array.from)进行迭代, 移动或删除节点。任何人都可以帮助提供如何做到这一点的代码示例吗?
【问题讨论】:
标签: javascript dom addeventlistener removeeventlistener htmlcollection