【问题标题】:jQuery clone infinite times?jQuery克隆无限次?
【发布时间】:2011-01-16 21:01:00
【问题描述】:

jQuery 的.clone() 似乎工作的方式,一旦你在某处插入一个克隆的对象,你不能在不重新克隆原始对象的情况下再次插入它。例如,如果您这样做:

var cloned = $('#elem1').clone();
$('#elem2').after(cloned);
$('#elem2').after(cloned);

只有一份elem1 会被复制,而第二个after 调用将不会执行任何操作。

有没有办法在使用克隆对象后不“清除剪贴板”?现在我正在通过在将其插入某处之前再次克隆对象来完成。有没有更好的方法来做到这一点?

【问题讨论】:

    标签: jquery clone infinite


    【解决方案1】:

    您的两行只是将相同的 jQuery 元素集移动了两次。如果您想要一个新副本,是的,您必须再次克隆它。 after() 不会克隆任何东西。它只是移动内容。 clone() 在这种情况下是创建内容的原因。

    var cloned = $('#elem1').clone();
    $('#elem2').after(cloned);
    cloned = $('#elem1').clone();
    $('#elem2').after(cloned);
    

    当您这样做时,您还应该更改或删除 ID 属性:

    var cloned = $('#elem1').clone().removeAttr("id");
    $('#elem2').after(cloned);
    cloned = $('#elem1').clone().removeAttr("id");
    $('#elem2').after(cloned);
    

    由于技术上不允许重复 ID,因此行为未定义。

    【讨论】:

    • 是的,我只是使用 ID 选择器作为示例 - 应该更加小心。
    • 不是 jquery 专家;是否需要第二次搜索?你能做吗,例如,cloned = cloned.clone() 而不是第三行的cloned = $('#elem1').clone()
    • @danielWagner 这不是一个好主意,除非你克隆的元素是空的(不应该这样,因为你应该使用循环来创建这些元素)。否则,您将克隆已插入“克隆”变量中的任何动态添加的输入;)
    猜你喜欢
    • 2013-01-01
    • 2018-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-20
    • 1970-01-01
    • 2011-12-19
    相关资源
    最近更新 更多