2013-03-05 59 views
1

我的問題是,爲什麼在我分離元素並將它們附加回來之後,第三個div上的click事件不再觸發了?事件不會被保留。jQuery與事件分離內容?

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(); 

例如:http://jsfiddle.net/sCJfc/

回答

1

detach()是不是在這裏指責。

您正在執行容器元素內部標記的副本,並且您將分離從該副本創建的元素。這些元素不是DOM的一部分,並且確實沒有任何註冊處理程序。

嘗試寫:

var detachedContent = container.children().detach(); 

相反的:

var content = container.html(); 
var detachedContent = $(content).detach(); 
+0

是的,它的.html()API中據說。謝謝 :) – test 2013-03-05 10:10:12

0

嘗試克隆子元素,刪除它們,然後將它們添加回使用克隆。

var detachedContent = $(container).children().clone(true); 
console.log(detachedContent); 
container.empty(); 

container.append(detachedContent); 

工作實例:http://jsfiddle.net/sCJfc/2/