2010-02-15 84 views
0

jQuery的.clone()似乎工作的方式,一旦你插入一個克隆的對象的地方,你不能再插入一次,而無需重新克隆原始對象。例如,如果你這樣做:
jQuery克隆無限次?

var cloned = $('#elem1').clone(); 
$('#elem2').after(cloned); 
$('#elem2').after(cloned); 

只有elem1一個副本將被複制和第二after呼叫會做什麼。

有沒有辦法在使用克隆對象後不「清除剪貼板」?現在,我正在通過在插入某個地方之前再次克隆該對象來做到這一點。有一個更好的方法嗎?

回答

3

你的兩行只是移動相同的jQuery元素集兩次。如果你想要一個新的副本,你必須再次克隆它。 after()不克隆任何東西。它只是移動內容。在這種情況下,clone()是創建內容的內容。

var cloned = $('#elem1').clone().removeAttr("id"); 
$('#elem2').after(cloned); 
cloned = $('#elem1').clone().removeAttr("id"); 
$('#elem2').after(cloned); 

爲重複的ID在技術上是不允許這樣的行爲是不確定的:

var cloned = $('#elem1').clone(); 
$('#elem2').after(cloned); 
cloned = $('#elem1').clone(); 
$('#elem2').after(cloned); 

此外,當你這樣做,你應該更改或刪除ID屬性。

+0

是的,我只是使用ID選擇器作爲例子 - 應該更加小心。 – Suan

+0

不是jQuery的專家;是需要的第二個搜索?你可以在第三行代替克隆= $('#elem1')。clone()',例如克隆=克隆。克隆()嗎? –

+0

@danielWagner這不是一個好主意,除非你的克隆元素是空的(不應該是這樣,因爲你應該用循環來創建這些元素)。否則,您將克隆已插入「克隆」變量中的任何動態添加的輸入;) –