在web开发过程中表格数据展示是一个很常见的功能,而且用户对其要求也比较高,性能、易用性等。今天我推荐一款利器给大家——Datatables;Datatables中文网

  一、介绍


Datatables是一款jquery表格插件。它是一个高度灵活的工具,可以将任何HTML表格添加高级的交互功能。(摘抄自Datatables中文网)

  二、优势


  • 分页,即时搜索和排序
  • 几乎支持任何数据源:DOM, javascript, Ajax 和 服务器处理
  • 支持不同主题 DataTables, jQuery UI, Bootstrap, Foundation
  • 各式各样的扩展: Editor, TableTools, FixedColumns ……
  • 丰富多样的option和强大的API
  • 支持国际化
  • 超过2900+个单元测试
  • 免费开源 ( MIT license )! 商业支持
  • 摘抄自Datatables中文网

  三、Demo(ajax数据源)


  1. 先上效果图

  1. 上代码

首先需要在html页面定义带有表头的table

 <table class="table table-bordered table-hover" id="example">
<thead>
<tr>
<th style="width: 85px">任务编号</th>
<th style="width: 20px">PRI</th>
<th style="width: 45px">状态</th>
<th >任务标题</th>
<th style="width: 60px">客户</th>
<th style="width: 40px">PM</th>
<th style="width: 60px">开发</th>
<th style="width: 60px">测试</th>
<th style="width: 60px">完成时间</th>
<th style="width: 300px">备注</th>
</tr>
</thead>
</table>

我这里采用ajax数据源

 var tt = $('#example').DataTable({
ajax:'/task/get_todoList',
columns:[
{'data':"task_no"},
{'data':"PRI"},
{'data':"status"},
{'data':"task_title"},
{'data':"customer_name"},
{'data':"abu_pm"},
{'data':"dev_name"},
{'data':"tester_name"},
{'data':"ekp_expect"},
{'data':"comment"},
],
"columnDefs": [
{
// "visible": false,
// "targets": [10]
},
{
"render": function(data, type, row, meta) {
return '<a name="view_on_erp" rel="' + row.ekp_oid + '" target="_blank">' + data + '</a>';
},
"targets": 0
},
{
"render": function(data, type, row, meta) {
return task_status[data];
},
"targets": 2
},
{
"render": function(data, type, row, meta) {
switch (row.ekp_task_type){
case "需求":
case "升级-零星需求-一般":
case "开发类-零星需求-一般":
return '<span class="label label-success">需</span>' + data + '</a>';
break;
case "BUG":
case "产品BUG":
case "升级-BUG修改-一般":
case "升级-BUG修改-紧急":
return '<span class="label label-danger">B</span>' + data + '</a>';
case "升级-咨询评估":
return '<span class="label label-info">咨</span>' + data + '</a>';
default:
return '<span class="label label-primary">'+row.ekp_task_type.substring(0,1)+'</span>' + data + '</a>';
} },
"targets": 3
},
{
"render": function(data, type, row, meta) {
return (data)? data+'('+row.developer_workload+")":"";
},
"targets":6
},
{
"render": function(data, type, row, meta) {
return (data)? data+'('+row.tester_workload+")":"";
},
"targets":7
},
{
"render": function(data, type, row, meta) {
return data.substring(0,10);
},
"targets":8
},
],
"createdRow": function ( row, data, index ) {
$(row).attr("rel",data.id);
switch (data.status)
{
case 1:
$(row).find("td:eq(6)").addClass("or_doing");
break;
case 2:
$(row).find("td:eq(7)").addClass("or_doing");
break; }
},
lengthMenu: [15,30,45,60,75,90,"ALL"],//这里也可以设置分页,但是不能设置具体内容,只能是一维或二维数组的方式,所以推荐下面language里面的写法。
paging: false,//分页
ordering: true,//是否启用排序
// order: [ [ 0, 'asc' ]],
// searching: true,//搜索
dom: "<'row'<'col-sm-12'tr>>" + "<'row'<'col-sm-5'i><'col-sm-7'p>>",
language: {
lengthMenu: '每页<select class="form-control input-xsmall">' + '<option value="15">15</option>' + '<option value="30">30</option>' + '<option value="50">50</option>' + '<option value="100">100</option>' + '</select>条记录',//左上角的分页大小显示。
search: '搜索:',//右上角的搜索文本,可以写html标签
paginate: {//分页的样式内容。
previous: "上一页",
next: "下一页",
first: "第一页",
last: "最后"
},
zeroRecords: "没有找到相关内容",//table tbody内容为空时,tbody的内容。
//下面三者构成了总体的左下角的内容。
info: "总共_PAGES_ 页,显示第_START_ 到第 _END_ ,筛选之后得到 _TOTAL_ 条,初始_MAX_ 条 ",//左下角的信息显示,大写的词为关键字。
infoEmpty: "0条记录",//筛选为空时左下角的显示。
infoFiltered: ""//筛选之后的左下角筛选提示,
},
showRowNumber:true,
bAutoWidth:false,
});

四、说说过程中遇到的问题:


Q1:如何自定义查询?

A:datatables支持自定义表格布局,你可以根据自己的情况绘制不一样的布局;我这里是在表格的顶部加入了一个查询和一个自定义按钮。

 $(document).on("click", ".btn-search", function (e) {
var keyword = $('.search-form[type="search"]').val();
if(keyword === '') {
$.toast("请输入查找内容","info");
return false;
}
tt.search(keyword).draw();
});

给查询按钮绑定事件,调用datatables的search()方法,然后再重绘datatable(draw())即可。

Q2:表格报错,为什么不能正常展示数据?

A:这个问题可能由两种情况导致(我遇到的情况),一种表格头部定义的列数和数据行定义的列不一样会提示以上错误;第二种情况就是服务端返回的数据格式不正确,第一次使用插件的时候,没有认证看api导致在这个地方排查了很久才找到原因。

标准数据源格式:

 {
"data": [
{
"id": 1,
"url": "http://www.gbtags.com/gb/index.htm",
"title": "Online Program knowledge share and study platform"
},
{
"id": 2,
"url": "http://www.gbtags.com/gb/listcodereplay.htm",
"title": "Share Code Gbtags"
},
{
"id": 3,
"url": "http://www.gbtags.com/gb/gbliveclass.htm",
"title": "Online live Gbtags"
},
{
"id": 4,
"url": "http://www.gbtags.com/gb/explore.htm",
"title": "Explorer Gbtags"
}
]
}

Q3:如何给行、列绑定属性?

A:datatables提供了createdRow这个回掉函数(function ( row, data, index )),当创建当前行时执行,入参分别是当前行js对象、当前行数据、行号。对于单元格的属性以及数据翻译都可以使用render函数(function(data, type, row, meta)),入参分别是指当前单元格数据、row是单元格所在行的数据。

Q4:使用模态窗口编辑行数据后,如何只刷新当前行?

A:这里可以调用datatables的ajax.reload();第二个参数来控制是否刷新页面。

tt.ajax.reload(null,false);

Q5:待续....

聊聊前段插件之Datatables的更多相关文章

  1. bootstrapDialog插件集成datatables插件遇到的异常

    最近项目中,涉及到很多细分领域的东西,有好些目前还没有详细的方案.这是后话,当前起步阶段,我要把握技术路线,搭建基础架构!其中,有好几个地方都用到模态框(Modal), 虽然Bootstrap框架里面 ...

  2. 插件笔记——dataTables使用说明

    jquery DataTables中文使用说明 出处:http://blog.vunso.com/201405/jquery-datatables%E4%B8%AD%E6%96%87%E4%BD%BF ...

  3. jquery插件之DataTables 参数介绍

    DataTables(http://www.datatables.net/)应该是我到目前为止见过的,功能最强大的表格解决方案(当然,不计算其它整套框架中的table控件在内). 先把它主页上写的特性 ...

  4. 前端开发:一个开源、简单易用的jQuery表格插件(DataTables)

    DataTables是一个基于jQuery库的开源(MIT协议)表格插件,支持添加.排序.分页.搜索.过滤等功能,使用简单.广受欢迎,能够与主流前端UI整合(如bootstrap.jQuery UI等 ...

  5. 前端插件之Datatables使用--上篇

    工欲善其事,必先利其器 本系列文章介绍我在运维系统开发过程中用到的那些顺手的前端插件,前边两篇分别介绍了Duallistbox插件和Select2插件的使用,这一篇开始Databases的征服之旅 D ...

  6. 前端插件之Datatables使用--下篇

    工欲善其事,必先利其器 本系列文章介绍我在运维系统开发过程中用到的那些顺手的前端插件,上一篇文章介绍了Datatables插件的基本使用,这一篇文章作为上一篇的延续,会介绍Databases的一些高级 ...

  7. 浅谈Django的Q查询以及AngularJS的Datatables分页插件

    使用Q查询,首先要导入Q模块: from django.db.models import Q 可以组合使用&,|操作符用于多个Q的对象,产生一个新的Q对象,Q对象也可以用~操作符放在前面表示否 ...

  8. Jquery.Datatables dom表格定位

    Datatables会添加一些控制元素在表格的周围,比如默认状态下改变每页显示条数(l)的空间在左上角,即使搜索框(f)在右上角,表格的信息(i)显示在左下角,分页控件(p)显示在右下角. 这些控件在 ...

  9. python_way day17 jQuery表单验证,事件绑定,插件,文本框架,正则表达式

    python_way day17 1.jQuery表单验证 dom事件绑定 jquery事件绑定 $.each return值的判断 jquery扩展方法 2.前段插件 3.jDango文本框架 4. ...

随机推荐

  1. 【原创】Apache ab测试时出现:apr_socket_recv "connection reset by peer" 104

    今天在用Apache自带的ab工具做以下简单的压测,本来是随便填几个参数,发现ab在1000并发以上报错:apr_socket_recv "connection reset by peer& ...

  2. python中pandas里面的dataframe数据的筛选小结

    pandas大家用的都很多,像我这种用的不够熟练,也不够多的就只能做做笔记,尽量留下点东西吧. 筛选行: a. 按照列的条件筛选 df = pandas.DataFrame(...) # suppos ...

  3. SOJ1022 Uniform Generator

    Computer simulations often require random numbers. One way to generate pseudo-random numbers is via ...

  4. [SCOI2012]奇怪的游戏

    题目 话说有没有跟我一样直接猜了一个最大值不会改变这样一个二乎乎的结论之后交上去保龄的呀 首先看到棋盘,选择相邻的格子,非常经典的黑白染色 显然那个二乎乎的结论是错的,随便就能\(hack\)了 于是 ...

  5. BZ4326 运输计划

    Time Limit: 30 Sec Memory Limit: 128 MB Submit: 2132 Solved: 1372 Description 公元 2044 年,人类进入了宇宙纪元.L ...

  6. django CBV模式下如何去掉csrf验证

    方式一:from django.views.decorators.csrf import csrf_exemptfrom django.utils.decorators import method_d ...

  7. ansible-playbook快速入门

    一.yaml语法: 1. yaml语法编写 1.1 同层级的字段通过相同缩进表示 1.2 map结构里面key/value用‘:’来分隔 1.3 key/value可以同行写,也可以换行写,换行写必须 ...

  8. Debian 8 时间同步

    每天执行一次 sudo ntpdate ntp.ubuntu.com 逐渐觉得麻烦了,有没有自动执行的方法? 在Linux中用户可以执行例行性的工作,使用crontab这个命令. 步骤: 1.在终端中 ...

  9. 如何在C#程序中模拟域帐户进行登录操作 (转载)

    .NET Core .NET Core也支持用PInvoke来调用操作系统底层的Win32函数 首先要在项目中下载Nuget包:System.Security.Principal.Windows 代码 ...

  10. javascript---我对闭包的理解

    一.闭包       闭包是一种特殊的对象.它由两部分构成:函数,以及创建该函数的环境.环境由闭包创建时在作用域中的任何局部变量组成. 如何理解这句话:以一个例子说明;(from MDN) funct ...