前言:至于动态列的绘画,就是动态列的配置问题,今天要写的呢,就是你已经写了一个动态列在datatable,现在你想重新绘制一遍这个表格,而且也是动态列的,里面有很多细节需要注意,首先,说一下动态列的配置,就是要在datatable配置下修改columns和data,代码如下:

 1 var aaa.datatable = $('#aaa').DataTable({ 2 'language': lan, 3 "dom": 'lBrt', 4 "paging": true, 5 "lengthChange": true, 6 "info": true, 7 'destroy': true, 8 "deferRender": true, 9 'columns': this.data.col_define,10 'data': this.data.rowdata,11 })

culumns里的this.data.col_define列定义是后台返回的data数据下有个col_define列表,列表下放着targets(列,从0开始),data(对应data下的键key),title(列名或者叫做列标题),data里的this.data.rowdata行数据定义是后台返回的data数据下有个rowdata列表,列表下放着每一行的键值对数据,每行用字典封装。其他的都是datatable的基本配置,想要修改成想要的其他控件可以看官网修改,然后,就是绘制完表格怎么清表格了,搜索了官网和很多其他博客,大概思路就是用destroy,clear,empty。

这里要分别解释三个功能,第一是destroy()方法,是破坏整个表格结构,clear是清除放入的数据,需要注意的是,有人会问只用destroy不行吗,当然不行啊,因为之前列定义和行数据的放入,里面已经有数据了,你destroy只是清除了表格的结构,数据还在的,所以就会导致你的数据并没有真正清除完,还有就是empty方法,这个是用来清空datable的,这个清空,和前面两种不用,这个是清楚整个div的,所以用法也不一样,在这里我就饶了半天弯路,后面封装对象起来就容易很多了,记住,destroy和clear是datatable清除的,empty是div清除的,如:

var table1=$('#aaa');var int_table1=$('#aaa').Datatable();int_table1.destroy();int_table1.clear();table1.empty();

那么,接下来就是,把这些清除表格的方法封装到render函数即可。

 render(table) { table.clear(); table.destroy(); }

这里需要提醒的是,把empty给拿出来,到时候具体重绘的时候再指定div去清除。还有这里的table,指的就是上面说的某div的datatable(),结合起来,你需要封装的对象就出来了。

class Object { constructor(table) { this.data = {}; this.table=table; } init(table1) { return this.table=table1.DataTable({ 'language': lan, "dom": 'lBrt', "paging": true, "lengthChange": true, "info": true, 'destroy': true, "deferRender": true, 'columns': this.data.col_define, 'data': this.data.rowdata, }) } render(table){ table.clear(); table.destroy(); }}

这里你会发现,因为我在这里摔惨了2333333.这里的table1指的就是前面提到的$(‘aaa’),所以不要多次一举的把table1.Datatable写成$(table1).Datatable。能做到这里,已经说明你的思路已经非常完善了,说明你已经成功了一半,下面就是AJAX的数据交互,对了,在AJAX之前,你要先声明好你的对象。

table=$('#aaa');int_table=$('#aaa').Datatable();obj=new Object(table);$.ajax({ type: 'POST', url: '/url', async: true, cache: false, data: {}, dataType: 'json', beforeSend: function () { }, success: function (res) { if ('ok' === res['code']) { obj.render(int_table); table.empty(); console.log(table); obj.data = res['data']; obj.init(table); console.log(table); } else { alert('失败' + res['msg']); } }, complete: function () { }, error: function (jqXHR, textStatus, errorThrown) { var e = JSON.parse(jqXHR.responseText); console.log('失败'+e['msg']); } });

当然,能够完成到这里,你已经很厉害了,因为你可以自定义列,然后重绘,再自定义列,封装起来的函数以后也可以接着用。

但是,我就算完成到了这一步,我在另一个地方重绘表格的地方,居然还是报错了,找了很久,反复校对了很多遍,终于给我找到错误了,就是一开始那个datatable我没有初始化,导致我清除和赋值的时候出现了问题。

所以,大家在用datatable的时候,一定要记得初始化表格。

$('#aaa').Datatable(opts);

opts里面的配置正常写就行,反正是初始化的,到时候你重绘表格的时候就会清除掉这个初始化表格。(重绘表头和行的就讲到这里了,不懂可以在下方提问,思路应该挺清晰的了)

这里我再附带一个TIP,如果你只是重绘数据,表头不换,那么你就可以用到下面这个render函数,这也是我一开始接触的只清除数据不清除表头的方法。

render(table) { var currentPage = table.page(); table.clear(); table.rows.add(this.staff_list); table.page(currentPage).draw(false); }

这个用来更新数据就很爽了,或者你用window.location.reload来更新整个页面,重新获取后台的数据初始化表格来刷新页面。其他的单纯刷新datatable方法也有就是table.draw(false)。不过这个会默认翻到第一页,所以我这里才会还有一个table.page();

经验分享:前端报错一定不要着急,看控制台报的什么错,再看前后端数据交互是否传送了正确的数据,如果没错,那就是前端的错了,datatable出现的大多数错误都是行列没对准这些错误,其实有时候并不是后端的错,可能多数都是前端绘制表格的时候出错了,关键就是找清除你自己写的代码的每一步,必要时多console.log一下,看下是否每一步都是你想要的结果,偶尔会出现undefined或者为空,那么,恭喜你,你找到错误了,离成功也就不远啦。

antd table动态表头_jQuery的datatable动态列处理,轻松重绘表格相关推荐

  1. DataTables warning:table id = TableDate: Cannot reinitialise DataTable的解决办法

    最近碰到了这个DataTables warning:table id = oaTableDate: Cannot reinitialise DataTable问题.使用DataTables做的表格,每 ...

  2. antd table 被内容撑开,设置columns宽度失效

    问题描述:antd table被内容撑开,设置某列的width无效 1. table  table-layout去控制 table {table-layout: fixed; } 2. 使用colum ...

  3. DataTable列自定义渲染切页无效重绘

    DataTable列自定义渲染切页 进行DataTable重绘 jsp代码 table = $("#detail_table").DataTable({language: lang ...

  4. antd table动态表头_使用 antd@4 table 自定义筛选表头功能做一个联动搜索表头筛选...

    前言: 上篇文章是使用 antd@4 table 自定义表头筛选完成一个表格动态列的功能,这次需要完成一个表头联动条件筛选功能. 一.开始前 开始之前先去 Antd 官网看下「自定义的列筛选功能」的代 ...

  5. antd table合并行或者列(动态添加合并行、列)

    antd table合并行或者列(动态添加合并行.列) 表头只支持列合并,使用 column 里的 colSpan 进行设置. 表格支持行/列合并,使用 render 里的单元格属性 colSpan ...

  6. DataTable动态表头

    jsp部分(此处只有table 其他无关): <table id="dataTable" class="table table-striped table-list ...

  7. easyui 表头合并_JQuery EasyUI DataGrid动态合并(标题)单元) 一

    JS: /** * EasyUI DataGrid根据字段动态合并单元格 * @param fldList 要合并table的id * @param fldList 要合并的列,用逗号分隔(例如:&q ...

  8. antd 表格设置动态列(动态表头)

    1.需求:勾选中某个项,表格就展示对应的数据,反之则不显示 2.表格的 columns 动态赋值(刚开始默认全部不展示) html: <div class="checkBox" ...

  9. 关于element table 动态表头+动态表头及内容+表格优化+初始化表格+隐藏功能,技术提升请来!

    本篇文章属于升级版,欢迎交流指教~~ 导航: 表格头部与内容对不齐 表格内容过长 处理初始化闪过暂无数据 动态表头1 动态表头+内容2 动态表头及层级表头 1.第一个就是表格头部与内容对不齐的问题了, ...

  10. datatables动态表头ajax,jQuery Datatables - 来自AJAX响应的表头

    我正在通过Datatables ajax请求检索包含不同行长度的数据集 . 例如,一个响应可能是: ... ['jan', 'feb', 'march', 'april'] ... 不同的响应只会是: ...

最新文章

  1. wxWidgets:wxSplitterWindow类用法
  2. 32位有符号整数_[LeetCode] 8. 字符串转换整数 (atoi)
  3. fl如何保存再次打开_「Excel技巧」Excel2016如何将自己设计的图表存为模板反复使用?...
  4. php 单引号 数据库,关于php:如何在写入Mysql数据库时处理撇号’单引号
  5. php 全局变量能定义数组吗,php数组声明、遍历、数组全局变量使用小结
  6. Flink】FLink 通讯组件 RPC
  7. c语言课程案例设计报告,C语言课程设计报告—范例解读.doc
  8. 打破“信息孤岛”不能透支信息安全
  9. C语言 ASCII码字符表
  10. 魔兽世界MPQ加载顺序
  11. 电脑 桌面图标上多了一个白色的文档图标 怎么去掉?
  12. 7.消费者的确认机制
  13. 费马大定理n=3时的欧拉证明,x^3+y^3=z^3无xyz≠0的整数解
  14. 十进制正整数转16进制
  15. poi操作Excel并修改单元格背景色
  16. 【专访】新奥“贫穷”贵公子王子峥
  17. 契约测试概念以及契约测试框架SCC VS PACT对比
  18. Linux重装时保留分区
  19. adb和java版本不匹配_Appium:adb服务器版本(31)与此客户端不匹配(36)
  20. vs2017+Qt应用程序,Qt设置软件图标ICON

热门文章

  1. android assets目录在哪,Android Studio 中 assets目录的使用
  2. selector多路复用_selectors模块 - 实现多路复用简单介绍
  3. navicat黑色_“黑色星期五”之SQL浅析
  4. 成考java_成考本科课程:《Java程序设计》
  5. 图书管理系统软件测试报告_软件测试新手入门小知识点,一定要牢记
  6. 求和函数计算机语言,在 Excel 中,计算求和的函数是 ____。
  7. python预定义_[Python] Pycharm 预定义 coding 模板
  8. 解决wordpress不能上传媒体问题
  9. ajaxSubmit 提交form 表单
  10. python的下划线