img figcaption attribute javascript javascript-events clonenode

javascript - figcaption - Elemento clónico con todos sus eventos.



title html css (2)

Estoy clonando un área de texto en una página, pero el elemento clonado no tiene ningún evento del elemento primario, ¿hay alguna forma de clonar todos los eventos en el elemento clonado?

var dupNode = node.cloneNode(deep);


¿Puede tal vez usar getEventListeners en nodos? ¿No sabe cómo es el soporte o si solo se admite en la consola?

function cloneMassive(node) { // Clone the node, don''t clone the childNodes right now... var dupNode = node.cloneNode(false); var events = getEventListeners(node); for(var p in events) { // All events is in an array so iterate that array: events[p].forEach(function(ev) { // {listener: Function, useCapture: Boolean} dupNode.addEventListener(p, ev.listener, ev.useCapture); }); } // Also do the same to all childNodes and append them. if (node.childNodes.length) { [].slice.call(node.childNodes).forEach(function(node) { dupNode.appendChild(cloneMassive(node)); }); } return dupNode; }

var dupBody = cloneMassive(document.body);

Pero parece que getEventListeners no es realmente compatible:

Obtenga detectores de eventos adjuntos al nodo mediante addEventListener

Si también necesita copiar todas las propiedades del evento en el nodo, necesitará una lista de todos, y luego simplemente copiarlos:

[''onclick'', ''onmouseover'', ''...''].forEach(function(method) { dupNode[method] = node[method]; });


Resolví este problema últimamente e incluso que esta es una publicación antigua, en caso de que alguien esté tratando de averiguarlo, agrego mi solución:

var button = document.createElement("i"); var click = document.createAttribute("onclick"); click.value = "FunctionName(this)"; button.attributes.setNamedItem(click);

En lugar de usar addEventListener , simplemente cree la función FunctionName . Bueno, esto es inútil si está extendiendo objetos que usan addEventListener