请参阅此jsfiddle
我的设置包含以下两个表:simTable = datatable-simf-sim
和resTable = datatable-simf-res
。
每次用户在resTable
的行中选择(点击)时,我都会尝试向simTable
添加一行,这非常有效。但是,当用户取消选择该行时,应将其从simTable
中删除。
resTable = $('#datatable-simf-res').dataTable({});
simTable = $('#datatable-simf-sim').dataTable({});
$('#datatable-simf-sim tr').click(function () {
if ($(this).hasClass('row_selected')) {
$(this).removeClass('row_selected');
var uniqueid = $(this).closest('tr').children('td:eq(0)').text();
$('#datatable-simf-res tr td').each(function () {
if ($(this).text() === uniqueid) {
var rowindex = $(this).closest('tr').index();
resTable.fnDeleteRow(rowindex);
}
});
} else {
$(this).addClass('row_selected');
var rows = [];
$(this).closest('tr').find("td").each(function (cell, v) {
rows.push($(this).text());
});
resTable.fnAddData(rows);
}
resTable.fnDraw();
});
当您使用jsfiddle(只需在行上单击多次)时,您将看到它将保持行不变,或删除错误的行。我假设与我在resTable
中识别行的方式有关,因为这是我最大的瓶颈。
那么如何在两个不同的表中成功识别和比较两行呢? 非常感谢你。
答案 0 :(得分:0)
虽然小提琴对我来说似乎很好,但删除行的更简洁方法是:
// iterate over rows, not all cells
$('#datatable-simf-res tr')
.filter(function () {
// check if the first column contains the unique ID
return $(this).find('td:first').text() === uniqueid
})
.each(function () {
// 'this' is the current DOM element, inside .each()
resTable.fnDeleteRow(this)
});
(DataTables API表示fnDeleteRow
接受索引或<tr>
元素。)