2013-06-05 19 views
16

ページ内のテキスト領域をクローンしていますが、クローンされた要素にはプライマリ要素のイベントがありません。クローンされた要素のすべてのイベントをクローンする方法はありますか?すべてのイベントを含む要素を複製する

var dupNode = node.cloneNode(deep); 
+0

[イベントリスナーでDOMノードをコピーする方法は?](http://stackoverflow.com/questions/15408394/how-to-copy-a -dom-node-with-event-listers) – Nickolay

答えて

7

ノードで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; 
} 

var dupBody = cloneMassive(document.body); 

しかし、getEventListenersが実際にサポートされていないようです:

Get event listeners attached to node using addEventListener


あなたが同様にあなたのノード上のすべてのイベントのプロパティをコピーする必要がある場合すべてのリストを必要とし、単純にコピーしてください:

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

私はケースの誰かが見つけるしようとしているだけで、私は私の解決策を追加し、これは古い記事であることを最近しても、この問題を解決した

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

代わりのaddEventListenerを使用して、ちょうど関数を作成FunctionName。あなたが使用しているオブジェクトを拡張する場合、これは役に立たないですaddEventListener

+0

これはOPの質問にどのように答えますか? 'startRecorind'とは何ですか? 'typ'とは何ですか? – m02ph3u5

関連する問題