是否可以存储元素中的所有事件侦听器,以便在克隆元素后检索它
//clone element makes event listeners stripped
var old_element=document.getElementById('dhtml_menu-1895');
// var el= alleventlistenersfrom this element
var new_element = old_element.cloneNode(true);
old_element.parentNode.replaceChild(new_element, old_element);
//some event actions
//give back original event listeners
答案 0 :(得分:1)
我认为你的问题的真正解决方案是将你的事件绑定到DOM上更高的元素,这样你就不必在创建元素时动态绑定事件。
所以我假设你有类似的东西:
<div class='parent'>
<div class='element-to-replace'></div>
</div>
你正在某处更改代码中的.element-to-replace
,但是你有这样的事件监听器:
document.querySelector('.element-to-replace').addEventListener('click', doSomething);
在这种情况下,您应该绑定到父元素,因为它永远不会更改并定位您的子元素。
document.querySelector('.parent').addEventListener('click', function(evt) {
if (evt.target.className.includes('element-to-replace'))
doSomething();
});
您可以这样做或抽象出这些新元素的创建,并将事件绑定代码放在功能块中。