Datatables jQuery数据表-使用jQuery对象替换/更新行。或更新

Datatables jQuery数据表-使用jQuery对象替换/更新行。或更新,datatables,datatables-1.10,Datatables,Datatables 1.10,我能够使用以下代码成功地向datatable添加一行: 作品: var serversTable = $('#datatable-table').dataTable().api(); var serverRowTemplate = Handlebars.compile($('#serverRowTemplate').html()); var $row = $(serverRowTemplate(data.results[r])); serversTable.row.add($row).dr

我能够使用以下代码成功地向datatable添加一行:

作品:

var serversTable = $('#datatable-table').dataTable().api();

var serverRowTemplate = Handlebars.compile($('#serverRowTemplate').html());

var $row = $(serverRowTemplate(data.results[r]));

serversTable.row.add($row).draw(false);
但是,当我尝试使用类似的方法更新(替换)一行时,我没有运气。我也尝试过使用fnUpdate,但似乎无法找到通过jQuery对象基本替换/更新现有行的正确方法。以下是无法更新表的代码:

不起作用:

var serversTable = $('#datatable-table').dataTable().api();

var oldRow = $('#dashboardTemplateContainer tr[data-tag="'+ data.results[r].tag + '"]'); // select the row i'm looking for

var serverRowTemplate = Handlebars.compile($('#serverRowTemplate').html()); //compiles the handlebars template. i need this template as i have a lot of conditionals etc. 

var $row = $(serverRowTemplate(data.results[r])); // turning the template into a jQuery object worked for the row.add() function in the above example.

serversTable.rows(oldRow).data($row).draw(false); // replace the old row with the new row. doesn't work.
有什么建议吗?

API方法只能用于检索数据。改为使用为行设置数据


但是,您将无法使用
节点的jQuery对象来更新行的数据。在这种情况下,最好的办法可能是删除带有的行,如果只有
节点,则重新添加该行。

如果在处理程序和更新事件中使用ajax,请执行以下步骤:

  • 在成功回调之前,首先获取对
    tr
    的引用
  • 然后,在响应中,附加一个
    AllColumnsData
    对象并用 更新数据
  • 函数clickHandler(e){
    var tid=$(此).data(“tid”);
    var currentTR=$(此);
    $.ajax({
    键入:“获取”,
    url:“/api/data/get/?tid=“+tid,
    成功:功能(数据){
    dt1.row(currentTR.data)(data.Data3);
    }
    });
    }
    
    $(文档).就绪(函数(){
    $(“#添加新”)。在('click',function()上{
    变量rData=[
    测试1,
    测试2,
    '',
    ''
    ];
    $('#dataTable').dataTable().row.add(rData.draw)(false);
    });
    $('#dataTable')。在('click','update',函数(){
    var pageParamTable=$('#dataTable')。dataTable();
    var tableRow=pageParamTable.row($(this.parents('tr'));
    变量rData=[
    测试1,
    测试2,
    '',
    ''
    ];
    页面参数表
    .行(tableRow)
    .数据(rData)
    .draw();
    });
    $('#dataTable')。在('click','delete',函数(){
    var pageParamTable=$('#dataTable')。dataTable();
    var tableRow=pageParamTable.row($(this.parents('tr'));
    pageParamTable.row(tableRow.remove().draw();
    });
    });
    

    我想这些代码会对你有所帮助

    但是我怎么能把它放在同一个位置上呢?@RohitKhatri,位置将取决于当前排序的列。即使使用了
    row().data()
    如果表排序所依据的列中的数据发生变化,位置也会发生变化。
    $(document).ready(function () {
        $('#add-new').on('click',function(){
            var rData = [
                test1,
                test2,
                '<a href="#" data-href="' + response.result[0].id + '" class="update">Update</a>',
                '<a href="#" data-href="' + response.result[0].id + '" class="delete">Delete</a>'
            ];
             $('#dataTable').DataTable().row.add(rData).draw(false);
        });
    
       $('#dataTable').on('click', '.update', function () {
            var pageParamTable = $('#dataTable').DataTable();
            var tableRow = pageParamTable.row($(this).parents('tr'));
            var rData = [
                test1,
                test2,
                '<a href="#" data-href="' + response.result[0].id + '" class="update">Update</a>',
                '<a href="#" data-href="' + response.result[0].id + '" class="delete">Delete</a>'
            ];
            pageParamTable
                    .row( tableRow )
                    .data(rData)
                    .draw();
        });
        $('#dataTable').on('click', '.delete', function () {
           var pageParamTable = $('#dataTable').DataTable();
            var tableRow = pageParamTable.row($(this).parents('tr'));
            pageParamTable.row( tableRow ).remove().draw();
        });
    });