我正在将一个外部库集成到我的一个项目中。不幸的是,这个外部库使用Prototype,而我的项目依赖于jQuery。除了以下问题外,我的工作正常:
- 在页面加载时,Prototype通过
Event.observe()
向页面上的DOM元素应用一个事件观察者 - 在一些用户交互之后,这个DOM元素然后使用
jQuery.clone()
克隆,以便它可以在页面的另一部分使用
不幸的是,克隆副本不再绑定到Prototype的Event.observe()
监听器。
我已经注意到jQuery.clone()接受两个参数来复制事件处理程序,但我想这只适用于jQuery自己的事件处理程序,而不是通过其他库应用的事件处理程序。
有没有人知道我如何创建元素的副本而不失去它的原型事件处理程序?
给定这个HTML
<div id="mydiv">with content</div>
这将克隆元素
var newdiv = $('mydiv').clone();
如果你想让克隆做一个深度克隆并克隆所有的子元素以及传递true
var newdiv = $('mydiv').clone(true);
然而 clone()
方法不复制观察者-所以我建议在DOM中放置一个观察者来观察冒泡到它的事件。
给定这个HTML
<div id="mydiv" class="cloneclick">with content</div>
和附加到<body>
,例如,克隆的div仍然有cloneclick
类,仍然会触发事件处理程序
$$('body').first().on('click','.cloneclick',function(){
alert('click happened');
});