我有一个 div,我想在页面的某处添加一个新的 div 副本,但带有新的 id 和新的事件处理程序。新 id 的形式可以是“原始 id + _clone”。我能够提供新的 id,但我希望原始 div 中的所有事件处理程序都附加到映射到新 id 的新 div。有没有办法使用 jQuery 来做到这一点?
4 回答
如果您查看该.clone()
函数的 jQuery 文档,您会看到有两个可选参数包括元素本身和克隆时元素后代的数据和事件处理程序。
这将处理保留事件处理程序(只要它们直接绑定到该元素,而不是被委托),那么您只需要修改id
结果元素的属性。以下应该做你需要的:
$('#myid').clone(true).prop('id', function(i, oldId) {
return oldId + '_cloned';
});
.clone(true);
这样事件处理程序应该与元素一起复制
您可以使用.clone( [withDataAndEvents] [, deepWithDataAndEvents]
复制事件处理程序和数据..
但是我怀疑受 ID 绑定的委托事件是否仍然适用于克隆元素。
示例:http: //jsfiddle.net/Sfrm9/
$(document).on('click'. '#someId', function () { });
#someId
- 克隆并将其更改为后将不起作用#someId_cloned
正如此处提到的 mcpDESIGNS ,您应该将其映射为使用class
而不是 id 用于委托处理程序,然后您的克隆应该可以正常工作。
前任:
<div id="#someId" class="someClass" >Test</div>
JS:
$(document).on('click'. '.someClass', function () { });
代替
$(document).on('click'. '#someId', function () { });
您可以使用 div 的类来绑定事件。然后,您可以将相同的类留给您需要响应该事件的所有 div。
如果您的事件是使用 id 选择器绑定的,它将无法在您的新 div 上运行,因为您必须更改其 id,但它应该适用于类。