Search code examples
javascriptjqueryclone

How to clone and change id?


I need to clone the id and then add a number after it like so id1, id2, etc. Every time you hit clone you put the clone after the latest number of the id.

$("button").click(function() {
    $("#id").clone().after("#id");
}); 

Solution

  • $('#cloneDiv').click(function(){
    
    
      // get the last DIV which ID starts with ^= "klon"
      var $div = $('div[id^="klon"]:last');
    
      // Read the Number from that DIV's ID (i.e: 3 from "klon3")
      // And increment that number by 1
      var num = parseInt( $div.prop("id").match(/\d+/g), 10 ) +1;
    
      // Clone it and assign the new ID (i.e: from num 4 to ID "klon4")
      var $klon = $div.clone().prop('id', 'klon'+num );
    
      // Finally insert $klon wherever you want
      $div.after( $klon.text('klon'+num) );
    
    });
    <script src="https://code.jquery.com/jquery-3.1.0.js"></script>
    
    <button id="cloneDiv">CLICK TO CLONE</button> 
    
    <div id="klon1">klon1</div>
    <div id="klon2">klon2</div>


    Scrambled elements, retrieve highest ID

    Say you have many elements with IDs like klon--5 but scrambled (not in order). Here we cannot go for :last or :first, therefore we need a mechanism to retrieve the highest ID:

    const all = document.querySelectorAll('[id^="klon--"]');
    const maxID = Math.max.apply(Math, [...all].map(el => +el.id.match(/\d+$/g)[0]));
    const nextId = maxID + 1;
    
    console.log(`New ID is: ${nextId}`);
    <div id="klon--12">12</div>
    <div id="klon--34">34</div>
    <div id="klon--8">8</div>