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 相关文章推荐
JavaScript 对象的属性和方法4种不同的类型
Mar 19 Javascript
js自定义事件及事件交互原理概述(二)
Feb 01 Javascript
使用javascript做的一个随机点名程序
Feb 13 Javascript
JavaScript中的正则表达式简明总结
Apr 04 Javascript
jqueryMobile 动态添加元素,展示刷新视图的实现方法
May 28 Javascript
Bootstrap框架结合jQuery仿百度换肤功能实例解析
Sep 17 Javascript
JQuery Ajax 异步操作之动态添加节点功能
May 24 jQuery
基于vue实现swipe分页组件实例
May 25 Javascript
详解小程序退出页面时清除定时器
Apr 28 Javascript
Vue基础配置讲解
Nov 29 Javascript
如何阻止移动端浏览器点击图片浏览
Aug 29 Javascript
一文带你理解vue创建一个后台管理系统流程(Vue+Element)
May 18 Vue.js
详解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
解析php dirname()与__FILE__常量的应用
2013/06/24 PHP
php面向对象值单例模式
2016/05/03 PHP
PHP7+Nginx的配置与安装教程详解
2016/05/10 PHP
Laravel 前端资源配置教程
2019/10/18 PHP
Javascript中的常见排序算法
2007/03/27 Javascript
用javascript实现兼容IE7的类库 IE7_0_9.zip提供下载
2007/08/08 Javascript
javascript获取select值的方法分析
2015/07/02 Javascript
分享15个大家都熟知的jquery小技巧
2015/12/02 Javascript
jQuery移动页面开发中的触摸事件与虚拟鼠标事件简介
2015/12/03 Javascript
JavaScript类型系统之基本数据类型与包装类型
2016/01/06 Javascript
封装属于自己的JS组件
2016/01/27 Javascript
JS验证逗号隔开可以是中文字母数字
2016/04/22 Javascript
基于ajax与msmq技术的消息推送功能实现代码
2016/12/26 Javascript
JS使用正则截取两个字符串之间的字符串实现方法详解
2017/01/06 Javascript
Vue 进阶教程之v-model详解
2017/05/06 Javascript
JS+HTML5实现图片在线预览功能
2017/07/22 Javascript
浅谈Vue下使用百度地图的简易方法
2018/03/23 Javascript
红黑树的插入详解及Javascript实现方法示例
2018/03/26 Javascript
详解react native页面间传递数据的几种方式
2018/11/07 Javascript
详解Vue-Router源码分析路由实现原理
2019/05/15 Javascript
微信小程序判断用户是否需要再次授权获取个人信息
2019/07/18 Javascript
TypeScript的安装、使用、自动编译的实现
2020/04/10 Javascript
浅谈vue中get请求解决传输数据是数组格式的问题
2020/08/03 Javascript
利用Tkinter和matplotlib两种方式画饼状图的实例
2017/11/06 Python
python程序运行进程、使用时间、剩余时间显示功能的实现代码
2019/07/11 Python
django实现模板中的字符串文字和自动转义
2020/03/31 Python
keras 两种训练模型方式详解fit和fit_generator(节省内存)
2020/07/03 Python
英国最大的电脑零售连锁店集团:PC World
2016/10/10 全球购物
捷克移动配件网上商店:ProMobily.cz
2019/03/15 全球购物
如何查询Oracle数据库中已经创建的索引
2013/10/11 面试题
EJB3推出JPA的原因
2013/10/16 面试题
专科毕业生就业推荐信
2013/11/01 职场文书
幼儿园教师培训方案
2014/02/04 职场文书
公司应聘自荐书
2014/06/14 职场文书
实现中国梦思想汇报2014
2014/09/13 职场文书
护士爱岗敬业心得体会
2016/01/25 职场文书