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

问题描述 投票:0回答:1

我正在尝试根据该行的某些属性的值从使用服务器端处理(以可视方式删除行数据和行/ tr的数据表)中删除行。

我正在使用remove()函数来执行此操作,并删除了行数据,但从视觉上看,表仍然保持不变。

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

因此,从使用服务器端处理的数据表中删除一行后,如何“重绘”表?是否还有其他功能,例如draw()重绘表,但仅使用数据表中的现有数据?

 $("#tableSelector").DataTable()
     .rows( function ( idx, data, node ) {
         return data.attribute_value == value_to_delete;
     } )
     .remove()
     .draw();
javascript jquery datatables server-side
1个回答
0
投票

最后,我找到了解决方案。我遵循了this thread,然后了解了DataTable的属性"dataSrc"。然后,使用此信息在堆栈溢出中搜索类似内容并找到this。因此,执行我要求的技巧是使用变量来过滤要在ajax调用中忽略的行。

我已经重用了referred question中提供的代码。结果如下: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();
});

提琴:https://jsfiddle.net/ek94mh1x/4/注意:这是一个客户端“删除”,我知道可以通过服务器端处理来完成,但就我而言,只允许在客户端执行此操作。此外,如果您需要删除多行,则可以使用数组作为参数并遵循相同的逻辑。我希望这可以帮助某人。

© www.soinside.com 2019 - 2024. All rights reserved.