jQuery表格插件datatables用法详解


Posted in Javascript onNovember 23, 2020

一、Datatables简介

DataTables是一个jQuery的表格插件。这是一个高度灵活的工具,依据的基础逐步增强,这将增加先进的互动控制,支持任何HTML表格。主要特点:

  • 自动分页处理
  • 即时表格数据过滤
  • 数据排序以及数据类型自动检测
  • 自动处理列宽度
  • 可通过CSS定制样式
  • 支持隐藏列
  • 易用
  • 可扩展性和灵活性
  • 国际化
  • 动态创建表格
  • 免费的

二、如何使用

在做后台的时候并没有美工和前端工程师来配合你做页面,为了显示数据并有一定的美感,我们可以使用jQuery的DataTables插件来帮助我们完成任务

1、DataTables的默认配置

$(document).ready(function() { 
$('#example').dataTable(); 
} );

2、DataTables的一些基础属性配置

"bPaginate": true, //翻页功能 
"bLengthChange": true, //改变每页显示数据数量 
"bFilter": true, //过滤功能 
"bSort": false, //排序功能 
"bInfo": true,//页脚信息 
"bAutoWidth": true//自动宽度

3、数据排序

$(document).ready(function() { 
$('#example').dataTable( { 
"aaSorting": [ 
[ 4, "desc" ] 
] 
} ); 
} );

从第0列开始,以第4列倒序排列
 4、隐藏某些列

$(document).ready(function() { 
$('#example').dataTable( { 
"aoColumnDefs": [ 
{ "bSearchable": false, "bVisible": false, "aTargets": [ 2 ] }, 
{ "bVisible": false, "aTargets": [ 3 ] } 
] } ); 
} );

5、国际化

$(document).ready(function() { 
$('#example').dataTable( { 
"oLanguage": { 
"sLengthMenu": "每页显示 _MENU_ 条记录", 
"sZeroRecords": "抱歉, 没有找到", 
"sInfo": "从 _START_ 到 _END_ /共 _TOTAL_ 条数据", 
"sInfoEmpty": "没有数据", 
"sInfoFiltered": "(从 _MAX_ 条数据中检索)", 
"oPaginate": { 
"sFirst": "首页", 
"sPrevious": "前一页", 
"sNext": "后一页", 
"sLast": "尾页" 
}, 
"sZeroRecords": "没有检索到数据", 
"sProcessing": "<img src='./loading.gif' />" 
} 
} ); 
} );

6、排序功能:

$(document).ready(function() { 
$('#example').dataTable( { 
"aoColumns": [ 
null, 
{ "asSorting": [ "asc" ] }, 
{ "asSorting": [ "desc", "asc", "asc" ] }, 
{ "asSorting": [ ] }, 
{ "asSorting": [ ] } 
] 
} ); 
} );

7、数据获取支持4种:如下

  • •DOM   文档数据 
  • •Javascript array  js数组 
  • •Ajax source     Ajax请求数据 
  • •Server side processing  服务器端数据 

三、实例讲解

1、需求:如下图所示,对datatables的内容进行添加,编辑,删除的操作。

2、分析:添加功能---单击add按钮,弹出对话框,添加新的内容。

编辑功能---单击datatables可以选中一行,此行改变颜色,即是已经选中,单击edit按钮,弹出dialog,此dialog中的内容是我们选中行的内容。如果没有选中行,点击edit按钮,则不会弹出dialog。当双击datatables中的某一行时,也弹出dialog,并且双击的行改变颜色,dialog中的内容是我们双击行的内容。

删除功能---单击datatables选中一行,单击delete按钮,弹出警告框,提示要不要删除所选内容。当没有选中任何内容时,单击delete按钮,不会弹出警告框,也不会删除内容。

3、编码:

Attributes//名称

<table id="gridtable" class="gridtable">//声明jquery datatables 
 <thead> 
  <tr> 
  <th>Name 
  </th> 
  <th>Value 
  </th> 
  <th>DisplayOrder 
  </th> 
 </tr> 
 </thead> 
 <tbody> 
 .....//datatables内容,此处省略 
 </tbody> 
</table> 
<input type="button" id="add" value="Add" />//添加按钮 
<input type="button" id="edit" value="Edit" />//编辑按钮 
<input type="button" id="delete" value="Delete" />//删除按钮 
 
 
<div id="e_Attributes">//声明dialog,异步更新 
 @using (Ajax.BeginForm("Update", "Product", new AjaxOptions 
{ 
 UpdateTargetId = "d_Attributes", 
 OnSuccess = "dialogClose", 
 HttpMethod = "Post", 
})) 
 { 
 <table> 
  <tbody> 
  <tr>    
   <td>Name</td> 
   <td> 
   <input id="name" name="Name" type="text" style="width:250px" class="required"/>*</td> 
  </tr> 
  <tr> 
   <td>Value</td> 
   <td> 
   <input id="value" name="Value" type="text" style="width:250px" class="required"/>*</td> 
  </tr> 
  <tr> 
   <td>DisplayOrder</td> 
   <td> 
   <input id="displayOrder" name="DisplayOrder" type="text" style="width:128px" class="required"/>*</td> 
  </tr> 
  <tr> 
   <td> 
   <input id="submit" type="submit" name="submit" value="Submit" /> 
   <input id="hiddenValue" type="hidden" name="hiddenValue" /> 
   </td> 
  </tr> 
  </tbody> 
 </table> 
 } 
</div>

上面代码说明:这段代码主要分了两个部分,第一部分是jquery datatables的声明,<table id="gridtable" class="gridtable">;第二部分是dialog的声明,以及操作所需要的action,此部分的操作选择ajax无刷新页面技术。所需js的代码:

<script type="text/javascript"> 
 function dialogClose() { 
  $("#e_Attributes").dialog("close"); 
 } 
 
 $("#e_Attributes").dialog({ 
  modal: true, 
  autoOpen: false, 
  show: { 
  effect: "blind", 
  duration: 1000 
  }, 
  hide: { 
  effect: "explode", 
  duration: 1000 
 }, 
 width: 400 
 }); 
 
 var editor; 
 
 $(function () { 
 //声明datatable 
  $("#gridtable").dataTable().fnDestroy(); 
  editor = $('#gridtable').dataTable({ 
  "bInfo":false, 
  "bServerSide": false, 
  'bPaginate': false,   //是否分页。 
  "bProcessing": false,   //当datatable获取数据时候是否显示正在处理提示信息。 
  'bFilter': false,   //是否使用内置的过滤功能。 
  'bLengthChange': false,   //是否允许用户自定义每页显示条数。 
  'sPaginationType': 'full_numbers', //分页样式 
  }); 
 //单击,赋值,改样式 
 $("#gridtable tbody tr").click(function (e) { 
  if ($(this).hasClass('row_selected')) { 
  $(this).removeClass('row_selected'); 
  putNullValue() 
  } 
  else { 
  editor.$('tr.row_selected').removeClass('row_selected'); 
  $(this).addClass('row_selected'); 
  var aData = editor.fnGetData(this); 
  if (null != aData) { 
   putValue(aData); 
  } 
  } 
 }); 
 //双击 
 $("#gridtable tbody tr").dblclick(function () { 
  if ($(this).hasClass('row_selected')) { 
  //$(this).removeClass('row_selected'); 
  } 
  else { 
  editor.$('tr.row_selected').removeClass('row_selected'); 
  $(this).addClass('row_selected'); 
  } 
 
  var aData = editor.fnGetData(this); 
  if (null != aData) { 
  putValue(aData); 
  } 
 
  $("#hiddenValue").val("edit"); 
  $("#e_Attributes").dialog("open"); 
 
 }); 
 //添加 
 $("#add").click(function () { 
  editor.$('tr.row_selected').removeClass('row_selected'); 
  putNullValue(); 
 
  $("#hiddenValue").val("add"); 
  $("#e_Attributes").dialog("open"); 
 }); 
 //编辑 
 $("#edit").click(function () { 
  var productAttributeID = $("#productAttributeID").val(); 
  if (productAttributeID != "" && productAttributeID != null) { 
  $("#hiddenValue").val("edit"); 
  $("#e_Attributes").dialog("open"); 
  } 
 
 }); 
 //删除 
 $("#delete").click(function () { 
  var productAttributeID = $("#productAttributeID").val(); 
  var productID = $("#productID").val(); 
  if (productAttributeID != null && productAttributeID != "") { 
  if (confirm("Delete?")) { 
   $.ajax({ 
   type: "GET", 
   url: "@Url.Action("DeleteAttribute", "Product")", 
   data: { ProductID: productID, ProductAttributeID: productAttributeID },//参数名要和Action 中的参数名相同 
   dataType: "html", 
   cache: false, 
   success: function (result) { 
    $("#d_Attributes").html(result); 
    $("#productAttributeID").val(null); 
   } 
   }); 
  } 
  } 
 }); 
 
 //赋空值,并去除input-validation-error样式(此样式不管有无,均可去除,所以不用判断了) 
 function putNullValue() { 
  。。。。。。//此处省略 
 } 
 //赋值 
 function putValue(aData) { 
  。。。。。。//此处省略 
 } 
 }); 
 
 $.ajaxSetup({ cache: false }); 
</script>

上面代码说明:这段代码分别为dialog 的声明,datatables的声明以add,edit,delete的操作。
添加功能效果图

jQuery表格插件datatables用法详解

编辑功能效果图:

jQuery表格插件datatables用法详解

删除效果图:

jQuery表格插件datatables用法详解

到此,功能已经全部实现,所需的代码也已经贴出。
4、分页实现

引入CSS文件和JS文件

<style type="text/css" title="currentStyle"> 
 @import "DataTables-1.8.1/media/css/demo_page.css"; 
 @import "DataTables-1.8.1/media/css/demo_table.css"; 
 @import "DataTables-1.8.1/media/css/demo_table_jui.css"; 
</style> 
<script type="text/javascript" language="javascript" src="DataTables-1.8.1/media/js/jquery.js"></script> 
<script type="text/javascript" language="javascript" src="DataTables-1.8.1/media/js/jquery.dataTables.js"></script> 
 
 -------------------------------------------------------------------------- 
 
-----------最简单的方式: 
 $(document).ready(function() { 
 $("#example").dataTable(); 
}); 
 
----------也可以自己定义各属性: 
<script type="text/javascript" language="javascript"> 
 $(document).ready(function() { 
  $("#example").dataTable({ 
//  "bPaginate": true, //开关,是否显示分页器 
//  "bInfo": true, //开关,是否显示表格的一些信息 
//  "bFilter": true, //开关,是否启用客户端过滤器 
//  "sDom": "<>lfrtip<>", 
//  "bAutoWith": false, 
//  "bDeferRender": false, 
//  "bJQueryUI": false, //开关,是否启用JQueryUI风格 
//  "bLengthChange": true, //开关,是否显示每页大小的下拉框 
//  "bProcessing": true, 
//  "bScrollInfinite": false, 
//  "sScrollY": "800px", //是否开启垂直滚动,以及指定滚动区域大小,可设值:'disabled','2000px' 
//  "bSort": true, //开关,是否启用各列具有按列排序的功能 
//  "bSortClasses": true, 
//  "bStateSave": false, //开关,是否打开客户端状态记录功能。这个数据是记录在cookies中的,打开了这个记录后,即使刷新一次页面,或重新打开浏览器,之前的状态都是保存下来的- ------当值为true时aoColumnDefs不能隐藏列 
//  "sScrollX": "50%", //是否开启水平滚动,以及指定滚动区域大小,可设值:'disabled','2000%' 
//  "aaSorting": [[0, "asc"]], 
//  "aoColumnDefs": [{ "bVisible": false, "aTargets": [0]}]//隐藏列 
//  "sDom": '<"H"if>t<"F"if>', 
  "bAutoWidth": false, //自适应宽度 
  "aaSorting": [[1, "asc"]], 
  "sPaginationType": "full_numbers", 
  "oLanguage": { 
   "sProcessing": "正在加载中......", 
   "sLengthMenu": "每页显示 _MENU_ 条记录", 
   "sZeroRecords": "对不起,查询不到相关数据!", 
   "sEmptyTable": "表中无数据存在!", 
   "sInfo": "当前显示 _START_ 到 _END_ 条,共 _TOTAL_ 条记录", 
   "sInfoFiltered": "数据表中共为 _MAX_ 条记录", 
   "sSearch": "搜索", 
   "oPaginate": { 
   "sFirst": "首页", 
   "sPrevious": "上一页", 
   "sNext": "下一页", 
   "sLast": "末页" 
   } 
  } //多语言配置 
 
  }); 
 }); 
 </script>

对于 dataTables 来说,表格必须通过 thead 和 tbody 进行说明,如下所示

<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> 
 <thead> 
  <tr> 
  <th> 
   Rendering engine 
  </th> 
  <th> 
   Browser 
  </th> 
  <th> 
   Platform(s) 
  </th> 
  <th> 
   Engine version 
  </th> 
  <th> 
   CSS grade 
  </th> 
  </tr> 
 </thead> 
 <tbody> 
  <tr class="odd gradeX"> 
  <td> 
   Trident 
  </td> 
  <td> 
   Internet Explorer 4.0 
  </td> 
  <td> 
   Win 95+ 
  </td> 
  <td class="center"> 
   4 
  </td> 
  <td class="center"> 
   X 
  </td> 
  </tr>

如果没有 thead 将会报错。

  • bPaginate: 是否分页,默认为 true,分页
  • iDisplayLength : 每页的行数,每页默认数量:10
  • sPaginationType: 分页样式,支持两种内置方式,two_button 和 full_numbers, 默认使用 two_button。
  • bLengthChange : 是否允许用户通过一个下拉列表来选择分页后每页的行数。行数为 10,25,50,100。这个设置需要 bPaginate 支持。默认为 true。
  • bFilter: 启用或禁止数据过滤,默认为 true。 注意,如果使用过滤功能,但是希望关闭默认的过滤输入框,应使用 sDom
  • bInfo: 允许或者禁止表信息的显示,默认为 true,显示信息。

最为简单的使用方式,就是零配置的方式。

/*
 * Example init
 */
$(document).ready(function(){
 $('#example').dataTable();
});

以上就是关于jQuery表格插件datatables用法的详细介绍,希望对大家的学习有所帮助。

Javascript 相关文章推荐
chrome浏览器不支持onmouseleave事件的解决技巧
May 31 Javascript
javascript随机显示背景图片的方法
Jun 18 Javascript
js实现精确到秒的日期选择器完整实例
Apr 30 Javascript
AngularJS基础 ng-readonly 指令简单示例
Aug 02 Javascript
bootstrap vue.js实现tab效果
Feb 07 Javascript
Canvas实现动态的雪花效果
Feb 13 Javascript
Webpack+Vue如何导入Jquery和Jquery的第三方插件
Feb 20 Javascript
详解在Vue中通过自定义指令获取dom元素
Mar 04 Javascript
windows下vue-cli及webpack搭建安装环境
Apr 25 Javascript
JavaScript设计模式之装饰者模式定义与应用示例
Jul 25 Javascript
详解Vue前端生产环境发布配置实战篇
May 07 Javascript
layui使用templet格式化表格数据的方法
Sep 16 Javascript
详解JavaScript UTC时间转换方法
Jan 07 #Javascript
jQuery formValidator表单验证
Jan 07 #Javascript
JavaScript中的原始值和复杂值
Jan 07 #Javascript
理解JS事件循环
Jan 07 #Javascript
angularjs创建弹出框实现拖动效果
Aug 25 #Javascript
JavaScript中定义类的方式详解
Jan 07 #Javascript
javascript类型系统 Window对象学习笔记
Jan 07 #Javascript
You might like
2020年4月新番动漫目录 官方宣布4月播出的作品一览
2020/03/08 日漫
乐信RP2100的电路分析和打磨
2021/03/02 无线电
Sorting Array Values in PHP(数组排序)
2011/09/15 PHP
Codeigniter中禁止A Database Error Occurred错误提示的方法
2014/06/12 PHP
推荐一款MAC OS X 下php集成开发环境mamp
2014/11/08 PHP
THINKPHP在添加数据的时候获取主键id的值方法
2017/04/03 PHP
PHP与SQL语句写一句话木马总结
2019/10/11 PHP
BOOM vs RR BO5 第四场 2.14
2021/03/10 DOTA
弹出层之1:JQuery.Boxy (一) 使用介绍
2011/10/06 Javascript
javascript学习笔记(二十) 获得和设置元素的特性(属性)
2012/06/20 Javascript
关于extjs treepanel复选框选中父节点与子节点的问题
2013/04/02 Javascript
如何使Chrome控制台支持多行js模式——意外发现
2013/06/13 Javascript
javascript中不等于的代码是什么怎么写
2013/12/29 Javascript
用JQuery实现全选与取消的两种简单方法
2014/02/22 Javascript
Jquery弹出层插件ThickBox的使用方法
2014/12/09 Javascript
js图片上传前预览功能(兼容所有浏览器)
2016/08/24 Javascript
jQuery实现的无限级下拉菜单功能示例
2016/09/12 Javascript
Vue.js 和 MVVM 的注意事项
2016/11/07 Javascript
nodejs和php实现图片访问实时处理
2017/01/05 NodeJs
Move.js入门
2017/02/08 Javascript
bootstrap table动态加载数据示例代码
2017/03/25 Javascript
vue响应式系统之observe、watcher、dep的源码解析
2019/04/09 Javascript
聊聊Vue中provide/inject的应用详解
2019/11/10 Javascript
vue中对象数组去重的实现
2020/02/06 Javascript
使用Vue实现一个树组件的示例
2020/11/06 Javascript
python实现unicode转中文及转换默认编码的方法
2017/04/29 Python
Django自定义用户表+自定义admin后台中的字段实例
2019/11/18 Python
Python装饰器用法与知识点小结
2020/03/09 Python
解决Alexnet训练模型在每个epoch中准确率和loss都会一升一降问题
2020/06/17 Python
使用keras框架cnn+ctc_loss识别不定长字符图片操作
2020/06/29 Python
Python爬虫之App爬虫视频下载的实现
2020/12/08 Python
Python tkinter之ComboBox(下拉框)的使用简介
2021/02/05 Python
自我鉴定200字
2013/10/28 职场文书
医院领导班子四风对照检查材料
2014/09/27 职场文书
2016年师德学习心得体会
2016/01/12 职场文书
DE1103使用报告
2022/04/05 无线电