Javascript 如何复制元素';将事件与其内部HTML关联?

Javascript 如何复制元素';将事件与其内部HTML关联?,javascript,javascript-events,Javascript,Javascript Events,我在我的webapp中加入了一个简单的lightbox功能: for(var i = 0, l = figs.length; i<l; i++){ figs[i].addEventListener("dblclick",function(){ lightbox.style.display = "block"; lbox.innerHTML = this.innerHTML; }); } for(var i=0,l=figs.length;i

我在我的webapp中加入了一个简单的lightbox功能:

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

for(var i=0,l=figs.length;i除非您使用
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;

“我如何用其innerHTML复制元素的事件?”你不能。为什么不呢?太好了!这有什么限制吗?浏览器对它的支持如何?你可以查看MDN文档;)(所有浏览器都应该支持它)。实际上这不行:“克隆节点复制其所有属性及其值,包括内在属性。”(in–line)侦听器。它不会复制使用addEventListener()添加的事件侦听器。“哦……我想我期望太多了:-/