jQuery Clone table row
Your problem is that your insertAfter
:
.insertAfter(".tr_clone")
inserts after every .tr_clone
:
the matched set of elements will be inserted after the element(s) specified by this parameter.
You probably just want to use after
on the row you're duplicating. And a little .find(':text').val('')
will clear the cloned text inputs; something like this:
var $tr = $(this).closest('.tr_clone');
var $clone = $tr.clone();
$clone.find(':text').val('');
$tr.after($clone);
Demo: http://jsfiddle.net/ambiguous/LAECx/ or for a modern jQuery: http://jsfiddle.net/ambiguous/LAECx/3274/
I'm not sure which input should end up with the focus so I've left that alone.
The code below will clone last row and add after last row in table:
var $tableBody = $('#tbl').find("tbody"),
$trLast = $tableBody.find("tr:last"),
$trNew = $trLast.clone();
$trLast.after($trNew);
Working example : http://jsfiddle.net/kQpfE/2/
Here you go:
$( table ).delegate( '.tr_clone_add', 'click', function () {
var thisRow = $( this ).closest( 'tr' )[0];
$( thisRow ).clone().insertAfter( thisRow ).find( 'input:text' ).val( '' );
});
Live demo: http://jsfiddle.net/RhjxK/4/
Update: The new way of delegating events in jQuery is
$(table).on('click', '.tr_clone_add', function () { … });