Muszę sklonować identyfikator, a następnie dodać numer po to podoba tak id1
, id2
itp Everytime trafisz klon umieścić klona po najnowszym numerze id.
$("button").click(function() {
$("#id").clone().after("#id");
});
Muszę sklonować identyfikator, a następnie dodać numer po to podoba tak id1
, id2
itp Everytime trafisz klon umieścić klona po najnowszym numerze id.
$("button").click(function() {
$("#id").clone().after("#id");
});
Odpowiedzi:
$('#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>
Załóżmy, że masz wiele elementów z identyfikatorami takimi jak, klon--5
ale pomieszane (nie w kolejności). Tutaj nie możemy iść :last
lub :first
dlatego potrzebujemy mechanizmu do pobrania najwyższego ID:
const $all = $('[id^="klon--"]');
const maxID = Math.max.apply(Math, $all.map((i, el) => +el.id.match(/\d+$/g)[0]).get());
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>
<script src="https://code.jquery.com/jquery-3.1.0.js"></script>
.closest(div[id^=id])
i .remove
tego div.
Aktualizacja: Jak zauważył Roko C.Bulijan ... musisz użyć .insertAfter, aby wstawić go po wybranym div. Zobacz także zaktualizowany kod, jeśli chcesz, aby był dołączony na końcu zamiast zaczynać po wielokrotnym klonowaniu. PRÓBNY
Kod:
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
});
Próbować,
$("#id").clone().attr('id', 'id1').after("#id");
Jeśli chcesz mieć automatyczny licznik, zobacz poniżej,
var cloneCount = 1;
$("button").click(function(){
$("#id").clone().attr('id', 'id'+ cloneCount++).insertAfter("#id");
});
'id'+ ++ id
w swoim kodzie.
.after
. Zobacz zaktualizowaną odpowiedź.
[id^=id]:last
Congrats.
To najprostsze rozwiązanie, które działa dla mnie.
$('#your_modal_id').clone().prop("id", "new_modal_id").appendTo("target_container");
Stworzyłem uogólnione rozwiązanie. Poniższa funkcja zmieni identyfikatory i nazwy sklonowanego obiektu. W większości przypadków będziesz potrzebować numeru wiersza, więc po prostu dodaj atrybut „data-row-id” do obiektu.
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;
}
To też działa
var i = 1;
$('button').click(function() {
$('#red').clone().appendTo('#test').prop('id', 'red' + i);
i++;
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<div id="test">
<button>Clone</button>
<div class="red" id="red">
</div>
</div>
<style>
.red {
width:20px;
height:20px;
background-color: red;
margin: 10px;
}
</style>
$('#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>