ehs*_*net 16 javascript clonenode javascript-events
我正在页面中克隆一个textarea,但克隆的元素没有任何主要元素的事件,有没有办法克隆克隆元素中的所有事件?
var dupNode = node.cloneNode(deep);
Run Code Online (Sandbox Code Playgroud)
你可以getEventListeners
在节点上使用吗?不知道支持是怎么回事,或者它是否只在控制台中支持?
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;
}
Run Code Online (Sandbox Code Playgroud)
var dupBody = cloneMassive(document.body);
Run Code Online (Sandbox Code Playgroud)
但似乎getEventListeners
并没有真正支持:
使用addEventListener获取附加到节点的事件侦听器
如果您还需要复制节点上的所有事件属性,则需要一个all列表,然后将它们复制到:
['onclick', 'onmouseover', '...'].forEach(function(method) {
dupNode[method] = node[method];
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
12031 次 |
最近记录: |