I need to clone the id and then add a number after it like so id1
, id2
, etc. Everytime you hit clone you put the clone after the latest number of the id.
$(\"button\").click(function() {
$(\"#id\").clone().after(\"#id\");
});
I need to clone the id and then add a number after it like so id1
, id2
, etc. Everytime you hit clone you put the clone after the latest number of the id.
$(\"button\").click(function() {
$(\"#id\").clone().after(\"#id\");
});
$(\'#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>
Update: As Roko C.Bulijan pointed out.. you need to use .insertAfter to insert it after the selected div. Also see updated code if you want it appended to the end instead of beginning when cloned multiple times. DEMO
Code:
var cloneCount = 1;;
$(\"button\").click(function(){
$(\'#id\')
.clone()
.attr(\'id\', \'id\'+ cloneCount++)
.insertAfter(\'[id^=id]:last\')
// ^-- Use \'#id\' if you want to insert the cloned
// element in the beginning
.text(\'Cloned \' + (cloneCount-1)); //<--For DEMO
});
Try,
$(\"#id\").clone().attr(\'id\', \'id1\').after(\"#id\");
If you want a automatic counter, then see below,
var cloneCount = 1;
$(\"button\").click(function(){
$(\"#id\").clone().attr(\'id\', \'id\'+ cloneCount++).insertAfter(\"#id\");
});
I have created a generalised solution. The function below will change ids and names of cloned object. In most cases, you will need the row number so Just add \"data-row-id\" attribute to the object.
function renameCloneIdsAndNames( objClone ) {
if( !objClone.attr( \'data-row-id\' ) ) {
console.error( \'Cloned object must have \\\'data-row-id\\\' attribute.\' );
}
if( objClone.attr( \'id\' ) ) {
objClone.attr( \'id\', objClone.attr( \'id\' ).replace( /\\d+$/, function( strId ) { return parseInt( strId ) + 1; } ) );
}
objClone.attr( \'data-row-id\', objClone.attr( \'data-row-id\' ).replace( /\\d+$/, function( strId ) { return parseInt( strId ) + 1; } ) );
objClone.find( \'[id]\' ).each( function() {
var strNewId = $( this ).attr( \'id\' ).replace( /\\d+$/, function( strId ) { return parseInt( strId ) + 1; } );
$( this ).attr( \'id\', strNewId );
if( $( this ).attr( \'name\' ) ) {
var strNewName = $( this ).attr( \'name\' ).replace( /\\[\\d+\\]/g, function( strName ) {
strName = strName.replace( /[\\[\\]\']+/g, \'\' );
var intNumber = parseInt( strName ) + 1;
return \'[\' + intNumber + \']\'
} );
$( this ).attr( \'name\', strNewName );
}
});
return objClone;
}