在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. Alpha 冲刺报告(2/10)

    Alpha 冲刺报告(2/10) 队名:洛基小队 团队困难汇总:在开始正式编码的时候遇到了很严重的问题,Cocos Creator的教程过少,之前浏览的官网上的教程以为很齐全,但是在最重要的脚本方面还 ...

  2. Java虚拟机18:Java对象大小、对象内存布局及锁状态变化

    一个对象占多少字节? 关于对象的大小,对于C/C++来说,都是有sizeof函数可以直接获取的,但是Java似乎没有这样的方法.不过还好,在JDK1.5之后引入了Instrumentation类,这个 ...

  3. ueditor 百度编辑器 解决表格没有边框

    因为项目需要,发现直接从word和excel复制粘贴以后,居然在禅道上表格没有边框了,故查了一下 这里从word,以及excel粘贴复制,都能直接有边框了,同时在编辑器里面新增表格,也能直接显示边框了 ...

  4. Odoo作为后端时如何返回数据给webapp、移动端app

    转载请注明原文地址:https://www.cnblogs.com/cnodoo/p/9307315.html  使用jinja2渲染的页面,可以直接在调用template.render()时传递参数 ...

  5. Android利用fidller进行网络抓包

    http://www.oschina.net/question/221817_129716?fromerr=z7ZX9oZR http://www.trinea.cn/android/android- ...

  6. querystring模块详解

    querystring模块用于处理query字符串,包含以下方法: parse.decode escape unescape encode.stringify parse.decode方法 parse ...

  7. 关于Android

    1:Handle与多线程 Handle是什么?官方说明:handle是Android给我们提供用来更新UI的一套机制,也是一套消息处理的机制.可以看出handle主要就是两个功能,一个是更新UI,另一 ...

  8. Jquery中的height(),innerHeight(),outerHeight()的区别

    前言 最近练习做弹窗,遇到height(),innerHeight(),outerHeight()的区别. 根据下面的盒模型来了解三者的区别. height():element的height; inn ...

  9. MySQL日期时间处理函数

    -- MySQL日期时间处理函数SELECT NOW() FROM DUAL;-- 当前日期时间:2017-05-12 11:41:47-- 在MySQL里也存在和Oracle里类似的dual虚拟表: ...

  10. 在用AJAX跨域请求时遇到的问题

    刚刚接触ajax就遇到一个词--跨域. 在我百度了各种资料以后总结了一句话:“只要不是在一个协议.域.名端口下,都属于跨域(127.0.0.1本地也属于跨域)”. 在做ajax请求的时候,请求不到并且 ...