如何仅使用数据表中的现有数据重绘使用服务器端处理的数据表?

How to redraw a Datatable that uses server side processing using only the existing data in the datatable?

我正在尝试根据行的某些属性的值从使用服务器端处理(删除行数据和 row/tr 可视化)的 Datatable 中删除一行.

我正在使用 remove() 函数执行此操作,它删除了行数据,但在视觉上 table 仍然相同。

所以我添加了 draw() 函数,但它重新初始化 table,包括数据。

那么,在从使用服务器端处理的 Datatable 中删除一行后,我如何 "redraw" table?是否有任何其他功能,如 draw() 重绘 table 但仅使用数据 table 中的现有数据?

 $("#tableSelector").DataTable()
     .rows( function ( idx, data, node ) {
         return data.attribute_value == value_to_delete;
     } )
     .remove()
     .draw();

终于,我找到了解决办法。 我关注了 this thread then read about the DataTable's property "dataSrc".
Then with this information searched for something similar in Stack Overflow and found .
所以做我要求的技巧是使用一个变量来过滤我想在 ajax 调用中忽略的行。

我重新使用了 中提供的代码。这是结果:

HTML:

<table id="example" class="display" cellspacing="0" width="100%">
     <thead>
         <tr>
           <th>Name</th>
           <th>Email</th>
           <th>Subject</th>
           <th>Status</th>
           <th>Message</th>
           <th>Details</th>
         </tr>
        </thead>
 </table>


JS:

$(document).ready(function() {
    function loadDataTable(excluded_name = undefined){
        $("#example").DataTable().destroy();
      $('#example').DataTable({
         // "processing" : true,
          "ajax" : {
              "url" : "https://api.myjson.com/bins/12uwp2",
               "dataSrc": (json) => {
               if(excluded_name !== undefined){
                return json.filter((item) => item.name !== excluded_name)
               }else{
                return json
               }
              }
          },
          "columns" : [ {
              "data" : "name"
          }, {
              "data" : "email"
          }, {
              "data" : "subject"
          }, {
              "data" : "status"
          },{
              "data" : "message"
          },
          {
             "mData": "Details",
             "mRender": function (data, type, row) {
                      return "<a class='delete' data-name='"+ row.name + "' data-id=" + row.id + " href='/Details/" + row.id + "'>Delete</a>";
                  }
          }]
      });
    }
    $(document).on("click", ".delete", function(e) {
        e.preventDefault()
        let excluded_name = $(this).data("name")
        alert("Excluding this name in the next load: " + excluded_name);
        loadDataTable(excluded_name);
    })
    loadDataTable();
});

Fiddle: https://jsfiddle.net/ek94mh1x/4/

注意:这是客户端 "delete",我知道这可以通过服务器端处理来完成,但在我的情况下,我只被允许在客户端进行。
此外,如果您需要删除多行,您可以使用数组作为参数并遵循相同的逻辑。
我希望这可以帮助某人。