聊聊前段插件之Datatables
在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数据源)
- 先上效果图
- 上代码
首先需要在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的更多相关文章
- bootstrapDialog插件集成datatables插件遇到的异常
最近项目中,涉及到很多细分领域的东西,有好些目前还没有详细的方案.这是后话,当前起步阶段,我要把握技术路线,搭建基础架构!其中,有好几个地方都用到模态框(Modal), 虽然Bootstrap框架里面 ...
- 插件笔记——dataTables使用说明
jquery DataTables中文使用说明 出处:http://blog.vunso.com/201405/jquery-datatables%E4%B8%AD%E6%96%87%E4%BD%BF ...
- jquery插件之DataTables 参数介绍
DataTables(http://www.datatables.net/)应该是我到目前为止见过的,功能最强大的表格解决方案(当然,不计算其它整套框架中的table控件在内). 先把它主页上写的特性 ...
- 前端开发:一个开源、简单易用的jQuery表格插件(DataTables)
DataTables是一个基于jQuery库的开源(MIT协议)表格插件,支持添加.排序.分页.搜索.过滤等功能,使用简单.广受欢迎,能够与主流前端UI整合(如bootstrap.jQuery UI等 ...
- 前端插件之Datatables使用--上篇
工欲善其事,必先利其器 本系列文章介绍我在运维系统开发过程中用到的那些顺手的前端插件,前边两篇分别介绍了Duallistbox插件和Select2插件的使用,这一篇开始Databases的征服之旅 D ...
- 前端插件之Datatables使用--下篇
工欲善其事,必先利其器 本系列文章介绍我在运维系统开发过程中用到的那些顺手的前端插件,上一篇文章介绍了Datatables插件的基本使用,这一篇文章作为上一篇的延续,会介绍Databases的一些高级 ...
- 浅谈Django的Q查询以及AngularJS的Datatables分页插件
使用Q查询,首先要导入Q模块: from django.db.models import Q 可以组合使用&,|操作符用于多个Q的对象,产生一个新的Q对象,Q对象也可以用~操作符放在前面表示否 ...
- Jquery.Datatables dom表格定位
Datatables会添加一些控制元素在表格的周围,比如默认状态下改变每页显示条数(l)的空间在左上角,即使搜索框(f)在右上角,表格的信息(i)显示在左下角,分页控件(p)显示在右下角. 这些控件在 ...
- python_way day17 jQuery表单验证,事件绑定,插件,文本框架,正则表达式
python_way day17 1.jQuery表单验证 dom事件绑定 jquery事件绑定 $.each return值的判断 jquery扩展方法 2.前段插件 3.jDango文本框架 4. ...
随机推荐
- UI(二)之正式过程
2018-12-04 09:48:25 1.SetWindowsHookEx ·钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统.每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获 ...
- Substring Search
查找子字符串 Introduction 在长度为 N 的文本里寻找长度为 M 的模式(子串),典型情况是 N >> M. 这个应用就很广泛啦,在文本中寻找特定的模式(子串)是很常见的需求. ...
- 20165318 2017-2018-2 《Java程序设计》第九周学习总结
20165318 2017-2018-2 <Java程序设计>第九周学习总结 目录 学习过程遇到的问题及总结 教材学习内容总结 第13章 Java网络编程 代码托管 代码统计 学习过程遇到 ...
- 1491. [NOI2007]社交网络【最短路计数】
Description 在社交网络(socialnetwork)的研究中,我们常常使用图论概念去解释一些社会现象.不妨看这样的一个问题. 在一个社交圈子里有n个人,人与人之间有不同程度的关系.我们将这 ...
- 【bzoj 2839】集合计数
权限题 根据广义容斥的套路就很好做了 设\(g_i\)表示交集至少有\(i\)个元素,\(f_i\)表示交集恰好有\(i\)个元素 显然有 \[g_i=\sum_{j=i}^n\binom{j}{i} ...
- luogu P4199 万径人踪灭
嘟嘟嘟 方案:回文子序列数 - 回文子串数. 回文子串数用manacher解决就行了,关键是怎么求会问序列数. 一个比较好的\(O(n ^ 2)\)的算法:对于一个回文中心\(i\),\(O(n)\) ...
- P1169 [ZJOI2007]棋盘制作
题目描述 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个8*8大小的黑白相间的方阵,对应八八六十四卦,黑白对应阴阳. 而我们的 ...
- listener.ora 与 tnsnames.ora
listener.ora 是oracle服务器端的网络配置文件,oracle 根据它来配置监听服务. tnsnames.ora 类似于unix 的hosts文件,提供的tnsname到主机名或者ip的 ...
- 【星云测试】Devops微服务架构下具有代码级穿透能力的精准测试
微服务是Devops场景下热门的开发框架,在大型项目中被广泛采用.它把一个大型的单个应用程序和服务拆分为数十个的支持微服务,独立部署.互相隔离,通过扩展组件来处理功能瓶颈问题,比传统的应用程序更能有效 ...
- vue实现分页
效果图: html页面: data数据: 方法: 计算属性: 样式: html代码: <!--分页--> <div class="page-bar"> &l ...
