Почему я теряю исходный элемент, когда я `клонирую` внутри`each`?
Я пытаюсь сделать свой собственный clone
функция, но я столкнулся с проблемой. Я могу использовать JQuery clone
функционировать по-своему без проблем, как это: `
$.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/)
Почему вторая версия удаляет оригинал?
1 ответ
Решение
Потому что вы возвращаете оригинал вместо клона. Используйте это вместо:
$.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/