【发布时间】:2013-09-10 02:49:31
【问题描述】:
This question 本质上是我要问的,但有不删除后代节点事件的限制。
在this fiddle 中,我尝试通过将附加的侦听器从 DOM 中移除并将其放回原处来移除它。
function removeListeners(el) {
var par = el.parentNode;
var place = el.nextSibling;
par.removeChild(el);
par.insertBefore(el, place);
}
不幸的是,这不起作用,您仍然可以单击以更改背景(这实际上很好,我从不知道您可以在元素不在 DOM 中的情况下附加事件)。
鉴于我尝试过的发现this
function removeListeners(el) {
var par = el.parentNode;
var clone = el.cloneNode(false);
par.replaceChild(clone, el);
for (var index = 0; index < el.childNodes.length; ++index)
clone.appendChild(el.childNodes[index]);
}
它会尝试做一个浅层克隆,然后将所有后代复制回去,但它不会复制所有子代。
aforementioned question's answer 说“[如果你想让孩子们保留他们的听众] 你将不得不一次明确地移除一个听众”。我不知道你会如何实现它。
我假设他的意思是获取事件类型的列表并依次删除每个事件的侦听器 (like jQuery can)。这不仅对custom events 是不可能的,而且vanilla JS 有no such functionality(你必须指定要删除的函数)。
【问题讨论】:
标签: javascript javascript-events