Вот мой стол в DIV:Невозможно клонировать строки таблицы с помощью JQuery
<div class="employmentHistory">
<table class="employmentHistoryForm">
<tr>
<th>Name</th>
<th>Position</th>
<th>Action</th>
</tr>
<tr class = "row">
<td>
<g:textField id="name" name="company" class="company"></g:textField></td>
<td>
<g:textField id="position" name="position" class="pos" ></g:textField></td>
<td><input type="button" class="deleteThisRow" value="Delete"/></td>
</tr>
</table>
<g:textField name="sumCompany" id="destination" ></g:textField>
</div>
Вот мой JQuery скрипт для клонирования второй строки в таблице выше:
$(document).ready(function(){
//This line clones the row inside the '.row' class and transforms it to plain html.
//var clonedRow = $('.row').clone().html();
var clonedRow=$('.row').clone().html().find("input").each(function() {
$(this).val('').attr('id', function(_, id) { return id + index });
}).end();
//This line wraps the clonedRow and wraps it <tr> tags since cloning ignores those tags
var appendRow = '<tr class = "row">' + clonedRow + '</tr>';
$('#btnAddMore').click(function(){
//this line get's the last row and appends the appendRow when it finds the correct row.
$('.employmentHistoryForm tr:nth-child(2)').after(appendRow);
});
//when you click on the button called "delete", the function inside will be triggered.
$('.deleteThisRow').live('click',function(){
var rowLength = $('.row').length;
//this line makes sure that we don't ever run out of rows.
if(rowLength > 1){
deleteRow(this);
}else{
$('.employmentHistoryForm tr:last').after(appendRow);
deleteRow(this);
}
});
function deleteRow(currentNode){
$(currentNode).parent().parent().remove();
}
index++;
});
При использовании строка в сценарии выше, как:
var clonedRow = $('.row').clone().html();
код прекрасно клонирует строку таблицы и добавляет его в конец table.But дю так ли plicates идентификатор поля текстовых полей, и я хочу, чтобы назначить уникальные идентификаторы для клонированных строк, которые я стараюсь, как:
var clonedRow=$('.row').clone().html().find("input").each(function() {
$(this).val('').attr('id', function(_, id) { return id + index });
}).end();
Но теперь запрос не работает в all.So, где я спутать и Что такое решение?
Если вы хотите клонировать элементы с уникальными идентификаторами, то эти элементы действительно не уникальны и, следовательно, не должны иметь уникальных идентификаторов. Почему бы просто не дать им занятия? –
@BradM Хорошо, даже если дать классы, но классы должны быть уникальными в каждой строке для текстовых полей. Как я должен это сделать с минимальными изменениями в вышеприведенном коде? – rahulserver
Я не знаю вашей логики/рассуждений позади этого, но я думаю, что вы слишком анализируете это. Единственное, что должно быть уникальным, это строки (которые технически уже есть, если вы основываетесь на индексе), но вы можете дать строкам атрибут data- * для более точной уникальности. Независимо от того, какая кнопка textbox/нажата внутри строки, всегда переходите к dom к уникальной строке и читайте ее index/data- *. Как только вы узнаете уникальную строку, где произошло событие, вы можете основывать свою логику на этом. –