我有一个包含以下信息的表:
<table id="Requirements">
<tr>
<td>
<select id="Id.0" name="Id.0" onChange="changeTextBox();">...
</td>
<td>
<select id="Comparator.0" name="Comparator.0" onChange="changeTextBox();">...
</td>
<td>
<input type="text" id="Integer.0" name="Integer.0"/>...
</td>
<td>
<select id="Value.0" name="Value.0">...
</td>
</tr>
</table>
和一个添加按钮。
<input type="button" id="addButton" value="Add" onClick="appendRow();"/>
我需要appendRow()
函数不仅克隆前一行,而且将其id和name更改为Id.1,Id.2,Comparator.1,Comparator.2等。因为某些drop向下菜单有很多值,创建一个巨大的append语句来重新创建每一行是不可行的。如何在创建克隆时更改克隆的属性?谢谢!
编辑:ID必须是.0,.1格式。此表单发布到一个URL,以便将其读取为
编辑2:代码
function appendRow() {
$("QualificationRequirements").append($("QualificationRequirements tr:last").clone());
}
没有尝试更改ID,只是一个我无法工作的简单克隆功能。
答案 0 :(得分:8)
您可以尝试此操作(DEMO)
<强> HTML:强>
<table width="100%" border="0" cellspacing="0" cellpadding="0" id="table-data">
<tr>
<td>SelectOne</td>
<td>Select two</td>
<!-- More Headers -->
</tr>
<tr>
<td>
<select id="Id.0" name="Id.0">...</select>
</td>
<!-- More tds -->
<td><input type="button" class="addButton" value="Add" /></td>
</tr>
</table>
<强> JS:强>
$(function(){
$("#table-data").on('click', 'input.addButton', function() {
var $tr = $(this).closest('tr');
var allTrs = $tr.closest('table').find('tr');
var lastTr = allTrs[allTrs.length-1];
var $clone = $(lastTr).clone();
$clone.find('td').each(function(){
var el = $(this).find(':first-child');
var id = el.attr('id') || null;
if(id) {
var i = id.substr(id.length-1);
var prefix = id.substr(0, (id.length-1));
el.attr('id', prefix+(+i+1));
el.attr('name', prefix+(+i+1));
}
});
$clone.find('input:text').val('');
$tr.closest('table').append($clone);
});
$("#table-data").on('change', 'select', function(){
var val = $(this).val();
$(this).closest('tr').find('input:text').val(val);
});
});
答案 1 :(得分:0)
尝试一下:
function addTableRow(table) {
var $tr = $(table).find('tr:last').clone();
$tr.find('input').attr('id', function(){
var parts = this.id.match(/(\D+)(\d+)$/);
return parts[1] + ++parts[2];
});
$(table).append($tr);
return true;
};