在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. 用pymysql代替MySQLdb

    在我刚开始学python的时候,用的是python2.7,那时候连接mysql用的库是MySQLdb(很诡异的大小写,初学者经常因为记不住大小写导致“No module named xxx”).燃鹅, ...

  2. 随手练——博弈论入门 leetcode - 486. Predict the Winner

    题目链接:https://leetcode.com/problems/predict-the-winner/ 1.暴力递归 当前数组左边界:i,右边界:j: 对于先发者来说,他能取到的最大值是:max ...

  3. etcd 删除

    vim /etc/sysconfig/flanneld FLANNEL_ETCD_ENDPOINTS="https://192.168.30.241:2379,https://192.168 ...

  4. 第三部分 OpenStack镜像管理

    一.简介 很多源都有为OpenStack已经编译好的各种镜像了,您可以直接下载并通过使用这些镜像来熟悉OpenStack. 不过如果是为生产环境进行部署的话,您一定需要构建含有定制软件或配置的镜像文件 ...

  5. leetcode 141. Linked List Cycle 、 142. Linked List Cycle II

    判断链表有环,环的入口结点,环的长度 1.判断有环: 快慢指针,一个移动一次,一个移动两次 2.环的入口结点: 相遇的结点不一定是入口节点,所以y表示入口节点到相遇节点的距离 n是环的个数 w + n ...

  6. PAT乙级1010

    1010 一元多项式求导 (25 分)   设计函数求一元多项式的导数.(注:x​n​​(n为整数)的一阶导数为nx​n−1​​.) 输入格式: 以指数递降方式输入多项式非零项系数和指数(绝对值均为不 ...

  7. shadowssock+openvpn 2.2.2 成功*** -- 好文档 - 原理理解+架构

    [root@iZrj9j4lxhjopzii4vhw0lZ 2.0]# grep -v '^#' vars |grep -v '^$'export EASY_RSA="`pwd`" ...

  8. bat设置windows计划任务

    设置定时任务 @echo off set NAME=dailybackup :: set DAY=MON,TUE,WED,THU,FRI,SAT,SUN set COMMAND=cscript.exe ...

  9. ArcGIS中的坐标系统定义与投影转换(转)

    ArcGIS中的坐标系统定义与投影转换 ArcGIS中的坐标系统定义与投影转换 坐标系统是GIS数据重要的数学基础,用于表示地理要素.图像和观测结果的参照系统,坐标系统的定义能够保证地理数据在软件中正 ...

  10. Eclipse开发工具常用快捷键的使用技巧

      Eclipse作为软件开发的常用工具,被很多的人所欢迎,尤其是丰富的快捷键,可以极大的提高编码的效率,下面将常用的快捷键做了整理,便于大家学习和使用. Eclipse常用快捷键 1代码提示 Alt ...