识别并比较两个不同表中的两行

时间:2014-01-29 02:25:38

标签: javascript jquery datatables

请参阅此jsfiddle 我的设置包含以下两个表:simTable = datatable-simf-simresTable = 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中识别行的方式有关,因为这是我最大的瓶颈。

那么如何在两个不同的表中成功识别和比较两行呢? 非常感谢你。

1 个答案:

答案 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>元素。)