2012-10-30 35 views

回答

11

一個更好的解決方案。從1.7版本,off()是解除綁定的首選方法:

$('#grolsh').clone(true).off(); 
+0

那麼究竟是什麼.off()和.unbind()有什麼區別? –

+1

這裏閱讀http://stackoverflow.com/questions/9113783/whats-the-difference-between-jquery-bind-and-jquery-on –

1

通過添加.off()

$('#grolsh').clone(true) 
    .attr({'id': 'newGrolsh'}) 
    .off() 
    .appendTo('#target'); 

更新時間: 阿德里安建議.off將超過.unbind

7

只需使用

$('#grolsh').clone(); // 複製元素結構

$('#grolsh').clone(true) // 複製與結構沿兩個數據和事件

$('#grolsh').clone(true).off() // 複製兩個數據和事件並刪除處理程序

.on()綁定並使用.off()移除的事件;

.bind()綁定並使用.unbind()刪除的事件;

+0

第一種情況是不正確的,數據不復制與克隆()並沒有參數http://jsfiddle.net/ALxz4/ – charlietfl

+0

文檔狀態「從jQuery 1.4開始,所有元素數據(由.data()方法附加)也被複制到新副本中。」但從我的測試,正常克隆()沒有複製數據 –

+0

感謝您指出它..修正措辭:) –

0

由於從jQuery的版本1.5的,你可以通過第二個參數(請參見:.clone([withDataAndEvents ] [, deepWithDataAndEvents ]))不復制事件處理程序:

$('#grolsh').clone(true,false); 
+0

不,這只是「一個布爾值,指示是否應該複製克隆元素的所有子元素的事件處理程序和數據。」 - 如果你的'#grolsh'沒有任何事件,就好像數據一樣。但它不是那樣的。 –

0

如果你真的只是想複製由.data()方法不要附加數據「T濫用事件(未)結合和只是做:

var $original = $(".originalSelector"); 
var $clone = $original.clone().data($original.data()); 

因爲當你經過一個目的是.data()方法,它與它擴展了當前的數據。

!重要提示!
如果您打算使用存儲DOM引用並使用它的東西,則不能這樣做。 jQuery UI的可拖動等等
=>只能用在 「純」 數據/基本類型