Почему я теряю исходный элемент, когда я `клонирую` внутри`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/

Другие вопросы по тегам