当我在`each`中“克隆”时,为什么我会丢失原始元素?

时间:2013-02-15 16:03:47

标签: jquery jquery-1.8 jquery-clone

我正在尝试创建自己的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 个答案:

答案 0 :(得分: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/