在javascript中存储来自dom元素的事件监听器

时间:2016-01-13 13:22:20

标签: javascript dom javascript-events clone

是否可以存储元素中的所有事件侦听器,以便在克隆元素后检索它

//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

1 个答案:

答案 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();
});

您可以这样做或抽象出这些新元素的创建,并将事件绑定代码放在功能块中。