Строка таблицы jQuery Clone
У меня есть таблица с кнопкой Add в конце. Когда вы нажимаете эту кнопку, я хочу создать новую строку таблицы под текущей. Я также хочу, чтобы поля ввода в этой строке были пустыми. Я пытаюсь сделать это с помощью .clone(), но он клонирует все строки на странице. Пожалуйста помоги. Благодаря
Script
$("input.tr_clone_add")
.live('click', function(){
$(this).closest('.tr_clone')
.clone()
.insertAfter(".tr_clone")
});
HTML
<table width="100%" border="0" cellspacing="0" cellpadding="0" id="table-data">
<tr>
<td>Name</td>
<td>Location</td>
<td>From</td>
<td>To</td>
<td>Add</td>
</tr>
<tr class="tr_clone">
<td><input type="text" autofocus placeholder="who" name="who" ></td>
<td><input type="text" autofocus placeholder="location" name="location" ></td>
<td><input type="text" placeholder="Start Date" name="datepicker_start" class="datepicker"></td>
<td><input type="text" placeholder="End Date" name="datepicker_end" class="datepicker"></td>
<td><input type="button" name="add" value="Add" class="tr_clone_add"></td>
</tr>
</table><!-- /table#table-data -->
Ответы
Ответ 1
Ваша проблема в том, что ваш insertAfter
:
.insertAfter(".tr_clone")
вставляет после каждого .tr_clone
:
согласованный набор элементов будет вставлен после элемента (ов), заданного этим параметром.
Вероятно, вы просто хотите использовать after
в строке, которую вы дублируете. И немного .find(':text').val('')
очистит клонированные текстовые входы; что-то вроде этого:
var $tr = $(this).closest('.tr_clone');
var $clone = $tr.clone();
$clone.find(':text').val('');
$tr.after($clone);
Демо: http://jsfiddle.net/ambiguous/LAECx/
Я не уверен, какой вход должен быть в фокусе, поэтому я оставил его в покое.
Ответ 2
Здесь вы идете:
$( 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/
Обновление: Новый способ делегирования событий в jQuery
$(table).on('click', '.tr_clone_add', function () { … });
Ответ 3
Код ниже будет клонировать последнюю строку и добавить после последней строки в таблице:
var $tableBody = $('#tbl').find("tbody"),
$trLast = $tableBody.find("tr:last"),
$trNew = $trLast.clone();
$trLast.after($trNew);
Рабочий пример: http://jsfiddle.net/kQpfE/2/
Ответ 4
Попробуйте этот вариант:
$(".tr_clone_add").live('click', CloneRow);
function CloneRow()
{
$(this).closest('.tr_clone').clone().insertAfter(".tr_clone:last");
}
Ответ 5
Попробуйте это.
HTML
<!-- Your table -->
<table width="100%" border="0" cellspacing="0" cellpadding="0" id="table-data">
<thead>
<tr>
<th>Name</th>
<th>Location</th>
<th>From</th>
<th>To</th>
<th>Add</th>
</tr>
</thead>
<tbody>
<tr>
<td><input type="text" autofocus placeholder="who" name="who" ></td>
<td><input type="text" autofocus placeholder="location" name="location" ></td>
<td><input type="text" placeholder="Start Date" name="datepicker_start" class="datepicker"></td>
<td><input type="text" placeholder="End Date" name="datepicker_end" class="datepicker"></td>
<td><input type="button" name="add" value="Add" class="tr_clone_add"></td>
</tr>
<tbody>
</table>
<!-- Model of new row -->
<table id="new-row-model" style="display: none">
<tbody>
<tr>
<td><input type="text" autofocus placeholder="who" name="who" ></td>
<td><input type="text" autofocus placeholder="location" name="location" ></td>
<td><input type="text" placeholder="Start Date" name="datepicker_start" class="datepicker"></td>
<td><input type="text" placeholder="End Date" name="datepicker_end" class="datepicker"></td>
<td><input type="button" name="add" value="Add" class="tr_clone_add"></td>
</tr>
<tbody>
</table>
Script
$("input.tr_clone_add").live('click', function(){
var new_row = $("#new-row-model tbody").clone();
$("#table-data tbody").append(new_row.html());
});
Ответ 6
Попробуйте этот код,
Я использовал следующий код для клонирования и удаления клонированного элемента, я также использовал новый класс (newClass), который можно добавить автоматически с недавно клонированным html
для клонирования.
$(".tr_clone_add").live('click', function() {
var $tr = $(this).closest('.tr_clone');
var newClass='newClass';
var $clone = $tr.clone().addClass(newClass);
$clone.find(':text').val('');
$tr.after($clone);
});
для удаления элемента клона.
$(".tr_clone_remove").live('click', function() { //Once remove button is clicked
$(".newClass:last").remove(); //Remove field html
x--; //Decrement field counter
});
html соответствует следующему
<tr class="tr_clone">
<!-- <td>1</td>-->
<td><input type="text" class="span12"></td>
<td><input type="text" class="span12"></td>
<td><input type="text" class="span12"></td>
<td><input type="text" class="span12"></td>
<td><input type="text" class="span10" readonly>
<span><a href="javascript:void(0);" class="tr_clone_add" title="Add field"><span><i class="icon-plus-sign"></i></span></a> <a href="javascript:void(0);" class="tr_clone_remove" title="Remove field"><span style="color: #D63939;"><i class="icon-remove-sign"></i></span></a> </span> </td> </tr>
Ответ 7
Очень просто клонировать последний ряд с помощью jquery нажатием кнопки:
HTML-код вашей таблицы:
<table id="tableExample">
<thead>
<tr>
<th>ID</th>
<th>Header 1</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>Line 1</td>
</tr>
</tbody>
<tfoot>
<tr>
<td colspan="2"><button type="button" id="addRowButton">Add row</button></td>
</tr>
</tfoot>
</table>
JS:
$(document).on('click', '#addRowButton', function() {
var table = $('#tableExample'),
lastRow = table.find('tbody tr:last'),
rowClone = lastRow.clone();
table.find('tbody').append(rowClone);
});
С уважением!