2014-09-02 41 views
0

我成立一个简单的收藏夹功能集成到我的web应用程序:如何使用innerHTML复制元素的事件?

for(var i = 0, l = figs.length; i<l; i++){ 
    figs[i].addEventListener("dblclick",function(){ 
     lightbox.style.display = "block"; 
     lbox.innerHTML = this.innerHTML; 
    }); 
} 

的问题是,我想的div交互复制到收藏夹(这些是每一个具有事件侦听器,使他们互动图表)。有没有什么办法可以实现这一点,减少存储数组内的所有事件,并以某种方式复制这些?

+1

*“如何将元素的事件与其innerHTML复制?”*您不能。你为什么不[克隆DOM节点](https://developer.mozilla.org/en-US/docs/Web/API/Node.cloneNode)? – 2014-09-02 17:45:27

+0

完美!这有什么限制吗?浏览器如何支持? – 2014-09-02 17:46:43

+0

您可以查看MDN文档;)(它应该被所有浏览器支持)。 – 2014-09-02 17:47:14

回答

0

除非您使用jQuery,否则您将无法使用它的所有事件处理程序克隆节点,即使您可以这样做也不是个好主意(如果需要,我可以扩展)。

我想这些侦听器是通过一些针对这些DOM节点的进程(例如应用插件)附加的。你应该做的只是使用Element.prototype.cloneNode做一个你想要的DOM元素的深层或浅层副本,然后针对这些克隆重新执行这些进程。

如果克隆过程比较复杂,您可以考虑将其封装在正在添加侦听器的中。类似于:

function SomeObj(el) { 
    this.el = el; 
    attachSomeHandlersToEl(); 
} 

SomeObj.prototype.clone = function() { 
    var newEl = this.el.cloneNode(true); 

    return new this.constructor(newEl); 
}; 

var el = document.getElementById('some-el'), 
    someObj = new SomeObj(el), 
    clonedEl = someObj.clone().el; 
相关问题