$('#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 1var 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));});
<scriptsrc="https://code.jquery.com/jquery-3.1.0.js"></script><buttonid="cloneDiv">CLICK TO CLONE</button><divid="klon1">klon1</div><divid="klon2">klon2</div>
Zaszyfrowane elementy, odzyskaj najwyższy identyfikator
Załóżmy, że masz wiele elementów z identyfikatorami takimi jak, klon--5ale pomieszane (nie w kolejności). Tutaj nie możemy iść :lastlub :firstdlatego 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}`);
+1 za działające demo :) i dzięki za przejrzenie mojej odpowiedzi. Zaktualizowałem post, dodałem również działające demo jsfiddle.net/HGtmR/4
Selvakumar Arumugam
czy możliwe jest również umieszczenie przycisku wewnątrz elementu div, który usuwa bieżący identyfikator div?
user1324780
1
@ user1324780 Tak, jest to możliwe, ale powinieneś zadać to jako nowe pytanie. W każdym razie wskazówką jest znalezienie .closest(div[id^=id])i .removetego div.
Selvakumar Arumugam
1
idealnie pasują do moich potrzeb. Najprawdopodobniej zaoszczędziło mi to godzin pracy! dzięki
Nicolas Manzini
43
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");});
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.
$('#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 1var 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));});
.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:
Próbować,
Jeśli chcesz mieć automatyczny licznik, zobacz poniżej,
źródło
'id'+ ++ id
w swoim kodzie..after
. Zobacz zaktualizowaną odpowiedź.[id^=id]:last
Congrats.To najprostsze rozwiązanie, które działa dla mnie.
źródło
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.
źródło
To też działa
źródło
źródło