我的问题是,为什么在分离元素并将它们附加回来后,第三个div上的click事件不再被触发?事件未被保留。
var test = (function($, undef) {
var t = {};
t.test = function(){
var container = $('<div/>').appendTo('body');
$('<div/>', {
'class' : 'some',
'text' : 'text'
}).appendTo(container);
$('<div/>', {
'class' : 'some',
'text' : 'text'
}).appendTo(container);
$('<div/>', {
'class' : 'some',
'text' : 'text',
'click' : function(){
console.log("ahoy");
}
}).appendTo(container);
$('<div/>', {
'class' : 'some',
'text' : 'text'
}).appendTo(container);
var content = container.html();
var detachedContent = $(content).detach();
container.empty();
//setTimeout(function(){
container.append(detachedContent);
//}, 2000);
};
return t;
})(jQuery);
test.test();
答案 0 :(得分:1)
detach()不应该责怪这一点。
您正在执行容器元素的内部标记的副本,并且您正在分离从该副本创建的元素。这些元素不是DOM的一部分,并且确实没有在它们上面注册任何处理程序。
尝试写作:
var detachedContent = container.children().detach();
而不是:
var content = container.html();
var detachedContent = $(content).detach();
答案 1 :(得分:0)
尝试克隆子元素,删除它们,然后使用克隆将它们添加回来。
var detachedContent = $(container).children().clone(true);
console.log(detachedContent);
container.empty();
container.append(detachedContent);