Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 为什么在“each”中“clone”时会丢失原始元素?_Jquery_Jquery 1.8_Jquery Clone - Fatal编程技术网

Jquery 为什么在“each”中“clone”时会丢失原始元素?

Jquery 为什么在“each”中“clone”时会丢失原始元素?,jquery,jquery-1.8,jquery-clone,Jquery,Jquery 1.8,Jquery Clone,我正在尝试制作自己的克隆功能,但遇到了一个问题。我可以自己使用jQuery的clone功能,而不会出现如下问题:` $.prototype.cloneDumpingEvents = function () { return $(this).clone(); }; (或者,请参见实际操作:) 但是,如果我试图使其适用于元素集合(添加每个),它会删除原始元素: $.prototype.cloneDumpingEvents = function () { return this.ea

我正在尝试制作自己的
克隆
功能,但遇到了一个问题。我可以自己使用jQuery的
clone
功能,而不会出现如下问题:`

$.prototype.cloneDumpingEvents = function () {
    return $(this).clone();
};
(或者,请参见实际操作:)

但是,如果我试图使其适用于元素集合(添加
每个
),它会删除原始元素:

$.prototype.cloneDumpingEvents = function () {
    return this.each(function() {
        $(this).clone();
    });
};
(或者,请参见实际操作:)


为什么第二个版本会删除原始版本?

因为您返回的是原始版本而不是克隆版本。改用这个:

$.fn.cloneDumpingEvents = function () {

    var collection = $();

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

    return collection;
};
这是你的小提琴:


正如@Fabrício Matté在评论中指出的那样,它要短得多:

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

这又是你的小提琴:

它能用,但我不明白。我甚至没有使用返回值,为什么要删除原始元素?@Shawn,因为
。each()
返回它迭代过的原始jQuery对象。@Shawn-当然,您使用的是返回值:
p.cloneDumpingEvents().text('myClone')…
。看,原始元素从未被移除。只是你改变了它的文本,所以你以为你在看新元素。哦,我明白了。我不明白@Fabricio Matté的第一句话。谢谢。顺便说一句约瑟夫,我相信这个任务可以用一种更简单的方式完成:免费添加到你的答案中。