How can i duplicate a div onclick with javascript?

后端 未结 3 723
北海茫月
北海茫月 2020-12-01 06:31

I want a div to be duplicated when a button is clicked. I though something like this; but it\'s not working. Can anyone help me?

HTML

相关标签:
3条回答
  • 2020-12-01 07:02

    Can you change the div to a class? If so, then this might work for you:

    # application.js
    $(function(){
      $('.photo:last').after('<a href="#" id="new_resource">Add another image<a/><br/>');
    
      $('a[href=#]').click(function(){
        $(this).before($('.photo:last').clone());
    
        $('.photo:last input').each(function(){
          $(this).removeAttr("value");
        });
    
        $('.photo:last input[type=hidden]').remove();
    
        return false;
      });
    })
    
    #html
    <div class="photo"
      <label>label</label>  
      <input type="file"></input>
    </div>
    

    Edit the code here:

    0 讨论(0)
  • 2020-12-01 07:15

    You are creating an infinite recursion!

    function duplicate()
    {
        var div = duplicate("div");
    

    The function is calling itself over and over again. Use cloneNode():

    HTML:

    <div id="duplicater0"> 
    duplicate EVERYTHING INSIDE THIS DIV
    </div>
    

    JavaScript:

    var i = 0;
    
    function duplicate() {
        var original = document.getElementById('duplicater' + i);
        var clone = original.cloneNode(true); // "deep" clone
       clone.id = "duplicater" + ++i; // there can only be one element with an ID
        clone.onclick = duplicate; // event handlers are not cloned
        original.parentNode.appendChild(clone);
    }
    

    Working DEMO

    Or without IDs:

    function duplicate() {
        var clone = this.cloneNode(true); // "deep" clone
        clone.id = ""; // there can only be one element with an ID
        clone.onclick = duplicate; // event handlers are not cloned
        this.parentNode.appendChild(clone);
    }
    

    Update:

    If you want to clone the div on button click, you can use a slightly different version:

    HTML:

    <button id="button" onclick="duplicate()">Click me</button>
    <div id="duplicater"> 
        duplicate EVERYTHING INSIDE THIS DIV
    </div>
    

    JavaScript:

    var i = 0;
    var original = document.getElementById('duplicater');
    
    function duplicate() {
        var clone = original.cloneNode(true); // "deep" clone
        clone.id = "duplicater" + ++i;
        // or clone.id = ""; if the divs don't need an ID
        original.parentNode.appendChild(clone);
    }
    

    If you are not in a form, you should use <button> instead of <input type="button">.

    Working DEMO 2

    0 讨论(0)
  • 2020-12-01 07:19
    <table>
    <tr>
    <td>
    <div id="duplicater"> 
        duplicate EVERYTHING INSIDE THIS DIV
    </div>
    </td>
    </tr>
    </table>
    <button id="button">Click me</button>
    
    $("#button").on('click', function (e) {
        e.preventDefault();
        var $self = $(this);
        $self.before($self.prev('table').clone());
    });
    
    0 讨论(0)
提交回复
热议问题