2013-02-15 52 views
0

我想盡我自己的clone功能,但遇到問題。我可以使用jQuery的clone功能在我自己沒有這樣的問題:'爲什麼我在`each`內部克隆時會丟失原始元素?

$.prototype.cloneDumpingEvents = function() { 
    return $(this).clone(); 
}; 

(或者,看到它在行動:http://jsfiddle.net/Shawn/dCm59/2/

但是,如果我試圖使它的元素集合的工作(加入each),它消除了原:

$.prototype.cloneDumpingEvents = function() { 
    return this.each(function() { 
     $(this).clone(); 
    }); 
}; 

(或者,看到它在行動:http://jsfiddle.net/Shawn/dCm59/3/

爲什麼第二版刪除原件?

回答

2

因爲你要返回原來的而不是克隆。而不是使用這樣的:

$.fn.cloneDumpingEvents = function() { 

    var collection = $(); 

    this.each(function() { 
     collection = collection.add($(this).clone()); 
    }); 

    return collection; 
}; 

這是你的提琴:http://jsfiddle.net/dCm59/4/


正如評論所指出的@FabrícioMatté,.map是遠遠短:

$.fn.cloneDumpingEvents = function() { 
    return this.map(function() { 
     return $.clone(this); 
    }); 
}; 

這裏是再次的提琴: http://jsfiddle.net/dCm59/7/

+0

它的工作原理,但我不明白。我甚至沒有使用返回值,爲什麼它會刪除原始元素? – Shawn 2013-02-15 16:08:05

+0

@Shawn因爲'.each()'返回它迭代的原始jQuery對象。 – 2013-02-15 16:08:23

+0

@Shawn - 當然你使用的是返回值:'p.cloneDumpingEvents().text('myClone')...'。看,原始元素從未被刪除。只是你改變了文字,所以你以爲你在看你的新元素。 – 2013-02-15 16:09:04

相關問題