如何使用 Datatables Jquery 插件销毁表并使用新的更新数据重新初始化同一个表

Posted

技术标签:

【中文标题】如何使用 Datatables Jquery 插件销毁表并使用新的更新数据重新初始化同一个表【英文标题】:how to destroy table and reinitialize same table with new updated data using Datatables Jquery plugin 【发布时间】:2021-09-03 06:43:35 【问题描述】:

我正在使用 Datatables 插件并使用从服务器返回的数据动态填充表。在不同的表上绘制返回的数据具有可变的列数。在每个表初始化中,代码会检查是否有以前的初始化,并在创建具有动态数据的新表之前将其删除,使用以下代码:

 if ( $.fn.dataTable.isDataTable( '#contracts_forecast' ) ) 

  $('#contracts_forecast').DataTable().clear();
  $('#contracts_forecast').DataTable().destroy();
$('#contracts_forecast tbody').empty();
$('#contracts_forecast thead').empty();



在服务器端,我手动编辑数据并更新数据库。当数据库用新数据更新时,我想刷新表,以便将更改反映在表中。为此,我使用了 POST SUBMIT 事件,该事件在数据提交到服务器后触发,然后调用函数 getDT(filter_product_code, filter_product_name) 用新数据更新表 p>

问题:

当 post submit 事件被触发时,它会调用函数 getDT(filter_product_code, filter_product_name);并反映了变化。 但是更新后的新表被添加到当前表中,而旧表没有被销毁,这让我在屏幕上看到了两个相同的表

p.s 我假设每次调用 getDT() 函数时,它应该检查表是否已初始化并在使用相同的创建新表之前销毁它

   $(document).ready(function() 
    
      $('#filter').click(function()
    
    
      var  filter_product_code = $('#filter_product_code').val();
      var filter_product_name = $('#filter_product_name').val();
    
    
       if(filter_product_code == '' || filter_product_name == '')
       
     alert('Select Both filter option');
       
    
    
    var columns = [];
    
    getDT(filter_product_code, filter_product_name);
    
    function getDT(filter_product_code, filter_product_name) 
    
      $.ajax(
    
                    serverSide: true,
                     type:'POST',
    
             url: "/XXX/_fetch.php",
    
              data:  filter_product_code: JSON.stringify(filter_product_code),
    
    
               filter_product_name: JSON.stringify(filter_product_name),
    
                  success: function (data) 
            data = JSON.parse(data);
            columnNames = Object.keys(data.data[0]);
            for (var i in columnNames) 
              columns.push(data: columnNames[i], 
                        title: capitalizeFirstLetter(columnNames[i]));
                                           
    
            
    
    
    
      if ( $.fn.dataTable.isDataTable( '#contracts_forecast' ) ) 
    
      $('#contracts_forecast').DataTable().clear();
      $('#contracts_forecast').DataTable().destroy();
    $('#contracts_forecast tbody').empty();
    $('#contracts_forecast thead').empty();
    
    
    
     
        table = $('#contracts_forecast').DataTable(
              data: data.data,
                columns: columns,
              
                dom: "Bfrtip",
                select: true,
            buttons: [
                 extend: "create", editor: editor ,
                 extend: "edit",   editor: editor ,
                 extend: "remove", editor: editor 
            ],
             "columnDefs": [
                
                    "targets": [0],
                    "visible": false,
                    "searchable": false
                ,
                  className: "tablecolumns", targets: "_all" ,
                ]
             );
    
       $('#contracts_forecast').on( 'click', 'tbody td:not(:first-child)', function (e) 
    
          editor.inline( this );
    
         );
    
     
      
        );
 editor.on( 'postSubmit', function (  e, json, data, action, xhr  ) 

 getDT(filter_product_code, filter_product_name);

      );
    
    
      );
    
     );

【问题讨论】:

【参考方案1】:

我在函数外部声明列变量是个错误。每次调用该函数时,它都会添加到已经存在的列中。所以只需要在函数内部定义列变量。

getDT(filter_product_code, filter_product_name);

function getDT(filter_product_code, filter_product_name) 

    var columns = [];


  $.ajax(

                serverSide: true,
                // paging: true,
                // retrieve:true,
                                         type:'POST',

【讨论】:

以上是关于如何使用 Datatables Jquery 插件销毁表并使用新的更新数据重新初始化同一个表的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 jQuery DataTables 插件实现服务器端处理?

如何使用 jQuery DataTables 插件过滤带有特殊字符的结果?

如何从 Datatables jQuery 插件中提取过滤后的数据?

如何使用 jQuery DataTables 插件在特定列中搜索?

如何删除 jQuery DataTables 插件添加的搜索栏和页脚?

如何使用 C#、ASP.NET、SQL Server 端处理实现 jQuery DataTables 插件?