在不加倍的情况下附加div内容的副本

时间:2013-08-28 10:36:59

标签: jquery

我想添加div的另一个副本,或者只是原始下面的内容。使用.clone()每次都会加倍。我想每次都添加一个相同的。无法弄清楚。有什么建议。代码目前。

$("#element").click(function(){

    var newElement = $("#element").clone();
    $("#element").append(newElement);

});

6 个答案:

答案 0 :(得分:0)

您需要将元素设为空()然后append

$("#element").click(function(){   
    var newElement = $("#element").clone();
    $("#element").empty();
    $("#element").append(newElement);

});

Difference here With Empty() and without Empty()

答案 1 :(得分:0)

<强> Demo

试试这段代码......

 $("#element").click(function(){
    var newElement =$('<div/>').html($("#element").html());
    $("#element").after(newElement);
});

答案 2 :(得分:0)

如果你不想让它翻倍,请使用

$("#element").html(newElement);

答案 3 :(得分:0)

试试这个http://jsfiddle.net/73Hb4/1/

不是最干净的解决方案,但要完成它。

基本上,您在第一个添加操作之前克隆该集,然后重新使用它:

$(document).ready(function () {
    var elements;
    $("#someid").on('click', function(){
        if(!elements)
        elements = $("#someid").clone();

        $("#someid").append(elements.clone());
    })
});

答案 4 :(得分:0)

这将在当前元素

之后追加元素的副本
$("#element").click(function () {
    $(this).after($(this).html());
});

答案 5 :(得分:0)

每次克隆的原因是append包含 div中的内容。所以你没有获得一个克隆的div但是在同一个div中克隆了内容,因此它加倍了。

你真正需要的是after。您可以在克隆*。

之后使用警报(newElement.html())对此进行验证

所以要在当前div之后实际克隆一个div,你还需要整个div本身,所以除了已经提供的一些答案之外,我们可以使用outerHTML属性。

$("#element").click(function(){

    var newElement = $(this.outerHTML);
    $("#element:last").after(newElement);

});

如果你需要点击处理程序来处理任何新的div,你需要等同于已弃用的live

$(document).on('click', '#element', function()

jsfiddle demo (包括上述内容的Prabu演示的变化。有了多个ID,我更喜欢在演示中使用类而不是#id)

  • 警报的替代方案:log.debug或firebug