Tabulator是一款非常实用的基于jQuery UI的表格插件。Tabulator表格插件可以快速的使用JSON数据来创建表格,它没有任何外部依赖的CSS样式和图片,使用非常简单。它的特点还有:
- 可以加载JSON,数组或AJAX数据。
- 支持表格列排序。
- 表格单元格可编辑。
- 可以添加和删除表格行。
- 可以自定义数据格式。
- 可以对表格数据进行过滤。
- 表格列可以用鼠标拖拽拉伸或缩小。
- 自动缩放来匹配数据/元素。
- 支持多种可选的表格主题。
- 自定义点击和上下文事件。
- 丰富的回调函数。
使用方法
使用该Jquery UI表格插件需要引入jQuery、jQuery UI相关文件和tabulator.js文件。
<link rel="stylesheet" href="js/jquery-ui-11.4/jquery-ui.theme.min.css"> <script type="text/javascript" src="js//jquery.min.js"></script> <script type="text/javascript" src="js/jquery-ui-11.4/jquery-ui.min.js"></script> <script type="text/javascript" src="js/tabulator.js"></script>
HTML结构
可以使用一个空的<div>
作为Tabulator表格的容器。
<div id="example-table"><div>
初始化插件
在页面DOM元素初加载完毕之后可以通过tabulator()
方法来初始化表格。
$("#example-table").tabulator();
定义表格头
可以通过在初始化的时候在columns
参数中传入一个数组或JSON对象来定义表格的表格头。
$("#example-table").tabulator({ columns:[ {title:"Name", field:"name", sortable:true, sorter:"string", width:200, editable:true}, {title:"Age", field:"age", sortable:true, sorter:"number", align:"right", formatter:"progress"}, {title:"Gender", field:"gender", sortable:true, sorter:"string", onClick:function(e, val, cell, row){console.log("cell click")},}, {title:"Height", field:"height", sortable:true, formatter:"star", align:"center", width:100}, {title:"Favourite Color", field:"col", sorter:"string", sortable:false}, {title:"Date Of Birth", field:"dob", sortable:true, sorter:"date", align:"center"}, {title:"Cheese Preference", field:"cheese", sortable:true, sorter:"boolean", align:"center", formatter:"tickCross"}, ], });
可以传入表格列中的参数有:
title
:必选参数。显示在表格列的标题。field
:必选参数(在图标/按钮列非必选项)。该列数据数组的key值。align
:设置表格列的对齐方式。(left|center|right)width
:设置表格列的宽度。(如果不设置系统会自动设置)sortable
:用户是否可以对表格列进行排序。sorter
:用于决定列排序的方式。(参看下面的表格排序介绍)formatter
:设置数据的格式。(参看下面的表格数据格式介绍)onClick
:当用户点击了列中的某个单元格时的回调函数。editable
:决定表格数据是否可编辑,布尔值,默认为false。
设置表格数据
Tabulator的行数据使用一组对象来定义,也可以使用AJAX从URL中传入一个数组或JSON格式的字符串来定义。
可以使用columns
参数来定义多个表格列,它会对数据进行排序,但不会立刻渲染到屏幕中。
每一行的数据必须有一个唯一的ID标识符,如果没有,Tabluator会自动为你添加一个。
下面是一个使用JSON数据的例子:
[ {id:1, name:"Billy Bob", age:"12", gender:"male", height:1, col:"red", dob:"", cheese:1}, {id:2, name:"Mary May", age:"1", gender:"female", height:2, col:"blue", dob:"14/05/1982", cheese:true}, {id:3, name:"Christine Lobowski", age:"42", height:0, col:"green", dob:"22/05/1982", cheese:"true"}, {id:4, name:"Brendon Philips", age:"125", gender:"male", height:1, col:"orange", dob:"01/08/1980"}, {id:5, name:"Margret Marmajuke", age:"16", gender:"female", height:5, col:"yellow", dob:"31/01/1999"}, {id:6, name:"Billy Bob", age:"12", gender:"male", height:1, col:"red", dob:"", cheese:1}, {id:7, name:"Mary May", age:"1", gender:"female", height:2, col:"blue", dob:"14/05/1982", cheese:true}, {id:8, name:"Christine Lobowski", age:"42", height:0, col:"green", dob:"22/05/1982", cheese:"true"}, {id:9, name:"Brendon Philips", age:"125", gender:"male", height:1, col:"orange", dob:"01/08/1980"}, {id:10, name:"Margret Marmajuke", age:"16", gender:"female", height:5, col:"yellow", dob:"31/01/1999"}, ]
使用数组设置数据
你可以使用setData
直接传入一个数组来作为表格的数据。
$("#example-table").tabulator("setData",[ {id:1, name:"Billy Bob", age:"12", gender:"male", height:1, col:"red", dob:"", cheese:1}, {id:2, name:"Mary May", age:"1", gender:"female", height:2, col:"blue", dob:"14/05/1982", cheese:true}, ]);
使用AJAX设置数据
如果你的数据来自于远程服务器,可以在setData
中传入URL地址,插件会使用AJAX的方式来处理请求。URL可以是相对地址也可以是绝对地址。
$("#example-table").tabulator("setData","http://www.getmydata.com/now");
JSON格式数据必须是格式化数组对象。
如果你的数据都是通过URL获取的,你可以在初始化的时候通过ajaxURL
参数来设置URL地址。
$("#example-table").tabulator({ ajaxURL:"http://www.getmydata.com/now", });
然后可以通过setData
在任何时候刷新表格数据。
$("#example-table").tabulator("setData");
数据排序
默认情况下所有的表格列都可以对列进行排序。你可以通过sortable
参数来设置列是否可以排序。
$("#example-table").tabulator({ sortable:false, // boolean值 (默认为true) }); // 你可以对单一的行使用sortable参数 {title:"Name", field:"name", sortable:true, sorter:"string"}
排序类型
默认情况下数据按字符串进行排序。如果你希望使用不同的排序方式,可以在列数据中使用sorter
参数来进行设置。
Tabulator预定义了一些数据排序方式,它们是:
string
:按字符串的字母对列进行排序。number
:按数值的大小对列进行排序。(可以是整数或浮点数,也可以处理使用,
分割的数字)。alphanum
:按alpha numeric code对列进行排序。boolean
:按布尔值对列进行排序。date
:按日期对列进行排序(使用这种排序方式你必须在创建表格时使用dateFormat
来设置日期格式,默认的日期格式为:dd/mm/yyyy
)。
{title:"Name", field:"name", sortable:true, sorter:function(a, b){ // a 和 b是两个要进行比较的值 // 返回值大于0时a大于b,返回值等于0时它们相等,返回值小于0时a小于b return a - b; }, }
表格加载后的排序
在数据加载到表格中的时候可以设置按某个指定列来进行排序。可以通过参数sortBy
或sortDir
来完成这个操作。
格式化数据
Tabulator允许你对表格数据进行自由的格式化。
你可以在每一列上使用formatter
参数来设置该列的数据格式。
{title:"Name", field:"name", formatter:"tick"}
Tabulator包括下面一些预定义的数据格式。
money
:将数值格式为货币格式,例如:1234567.8901 -> 1,234,567.89。email
:将数据作为锚链接使用mailto链接到一个邮件地址上。link
:将数据作为锚链接链接到指定的地址上。tick
:如果值为:true|'true'|'True'|1,则显示一个绿色的小勾,否则什么都不显示。tickCross
:如果值为:true|'true'|'True'|1,则显示一个绿色的小勾,否则显示一个红色的小叉。star
:显示0-5颗星级评分。progress
:在单元格值从左到右显示一个进度条,值为宽度的0-100%。
{title:"Name", field:"name", formatter:function(value, data, cell, row, options){ //value - 单元格的值 //data - 单元格所在的列的数据 //cell - 单元格的DOM元素 //row - 行的DOM元素 //options - 参数 //must return the html or jquery element of the html for the contents of the cell; return "<div></div>"; }, }
icon/按钮列
你可以在列数据值传入field
来设置icon/按钮列,并为列内容自定义格式。下面的例子在每一列的开头行显示一个打印机图标。
//custom formatter definition var printIcon = function(value, data, cell, row, options){ //plain text value return "<i class='fa fa-print'></i>" }; //column definition in the columns array {formatter:printIcon, width:40, align:"center", onClick:function(e, cell, val, row){alert("打印行数据: " + row.name)}},
数据过滤
Tabulator允许你对任何字段进行过滤。
你可以通过setFilter
方法来调用设置过滤器。在方法中传入你需要过滤的字段,比较类型和值。
$("#example-table").tabulator("setFilter", "age", ">", 10);
Tabulator内置了一些可用的过滤类型。
=
:只有当行的内容和过滤内个相等时才显示。<
:只有当值小于过滤值时才显示。>=
:只有当值大于或等于过滤值时才显示。>
:只有当值大于过滤值时才显示。<=
:只有当值小于等于过滤值时才显示。!=
:只有当值不等于过滤值时才显示。like
:当在指定的字段中包含指定的值时句显示这些行。
默认情况下,tabulator会假设你使用=
来作为过滤器。你也可以使用下面的简写方式:
$("#example-table").tabulator("setFilter", "name", "bob");
你每次只能调用一个过滤器,第二次调用会覆盖前面的过滤器。
获取当前的过滤器
可以使用getFilter
方法来获取当前表格中使用的过滤器。
$("#example-table").tabulator("getFilter");
如果没有设置过滤器,则会返回false
。否则会返回一个包含过滤器信息的对象。
{ "field":"age", "type":">", "value":10, }
清除过滤器
你可以通过clearFilter
方法来清除过滤器。
$("#example-table").tabulator("clearFilter");
你也可以通过设置不带值的setFilter
方法来清除过滤器。
$("#example-table").tabulator("setFilter");
管理数据
可以通过editable
参数来设置表格是否可以进行编辑。当用户点击了一个可以编辑的表格列,他将可以修改单元格中的内容(只有文本内容可以被编辑)。
添加表格行
你可以在任何时候使用addRow
方法来添加表格行。
$("#example-table").tabulator("addRow", {name:"Billy Bob", age:"12", gender:"male", height:1});
如果你没有为一个列传入数据,将产生一个空列。要制作一个空行,可以在方法中插入一个空的对象。
默认情况下,新行会被添加到表格的最后面,可以通过addRowPos
参数设置为top
来在表格第一行前插入新行。
删除表格行
你可以使用deleteRow
来删除一个表格行。
$("#example-table").tabulator("deleteRow", 15);
你也可以在参数中插入要删除的行的ID或代表行的数据对象来删除行。
检索数据
你可以使用getData
方法来检索存储在表格中的数据。
var data = $("#example-table").tabulator("getData");
该方法返回包含表格中每一行的数据对象的数组。
数据布局
Tabulator有两种不同的布局样式。
- 数据适配(默认)。
- 容器适配。
数据适配(Fit Columns to data)
这是表格的默认布局方式,它会将列扩展到内完全放置内容的宽度,这将使得表格的实际宽度大于容器的宽度,此时会有一个滚动条出现。
容器适配(Fit columns to container)
这种布局会调整列的宽度使整个表格包含在容器中。
如果任何列中指定了宽度,那么这个列会根据这个宽度来设置,其它列则根据这个列来进行自动调整。如果没有足够的空间来容纳所有的列,则会忽略所有已经设置的表格列宽度。
要使用这种布局可以将fitColumns
参数设置为true
。
$("#example-table").tabulator({ fitColumns:true, // this option takes a boolean value (default = false) });
可调整宽度的列
默认情况下可以通过拖动表格头的边框来改变列的宽度。要禁用这个选项可以在创建表格的时候设置colResizable
为false
。
$("#example-table").tabulator({ colResizable:false, // this option takes a boolean value (default = true) });
最小宽度列度
可以通过设置最小列宽来防止拖动列的宽度小于这个宽度。可以通过在创建表格的时候通过colMinWidth
参数来设置最小宽度值。
$("#example-table").tabulator({ colMinWidth:80, //Minimum column width in px (default = 40) });
重绘表格
如果包含在Tabulator表格中的元素的尺寸改变了,有必要重绘表格以确保每一列都匹配新的坐标。可以通过redraw
方法来重绘表格。
$(window).resize(function(){ $("#example-table").tabulator("redraw"); });
配置参数
排序初始化数据参数
参数 | 数据类型 | 默认值 | 描述 |
sortBy | string | "id" | 要排序的字段的名称 |
sortDir | string | "DESC" | 升序或降序排列(ASC 或 DESC) |
添加行配置参数
参数 | 数据类型 | 默认值 | 描述 |
addRowPos | string | "bottom" | 在什么位置添加一个新行,"top"或"bottom" |
表格主题配置参数
参数 | 数据类型 | 默认值 | 描述 |
backgroundColor | string | #888 | 背景颜色,任何有效的css颜色值 |
borderColor | string | #999 | 边框的颜色,任何有效的css颜色值 |
textSize | int/string | 14 | 表格中的字体大小 |
headerBackgroundColor | string | #e6e6e6 | 表格头单元格的背景色,任何有效的css颜色值 |
headerTextColor | string | #555 | 表格头的字体颜色,任何有效的css颜色值 |
headerBorderColor | string | #aaa | 表格头的边框颜色,任何有效的css颜色值 |
headerSeperatorColor | string | #999 | 表格头的底部边框颜色,任何有效的css颜色值 |
headerMargin | int/string | 4 | 表格头单元格的margin值,单位像素 |
sortArrows | object | 包含2种主题的排序小箭头的对象 | |
rowBackgroundColor | string | #fff | 表格行的背景色,任何有效的css颜色值 |
rowBorderColor | string | #fff | 表格行边框的颜色,任何有效的css颜色值 |
rowTextColor | string | #333 | 表格行文本的颜色,任何有效的css颜色值 |
rowHoverBackground | string | #bbb | 鼠标滑过时表格单元行的颜色,任何有效的css颜色值 |
排序箭头的主题
参数 | 数据类型 | 默认值 | 描述 |
active | string | #666 | 当前排序列的排序箭头 |
inactive | string | #bbb | 未排序列的排序箭头 |
表格尺寸配置参数
参数 | 数据类型 | 默认值 | 描述 |
height | string/int | false | 设置容器元素的高度,如果设置为false,则自动匹配表格元素的高度。 |
Data Loaders
在表格数据加载的时候,会显示一个lopading遮罩层,它包含一个模态背景和一个加载指示器。加载指示器可以通过参数进行设置,它必须是一个display:inline-block
样式的div元素。
参数 | 数据类型 | 默认值 | 描述 |
showLoader | boolean | true | 数据加载时是否显示指示器 |
loader | string | html(参考下面) | 指示器的HTML元素 |
loaderError | string | html(参考下面) | 加载出错时的HTML元素 |
默认的loader元素:
<div style='display:inline-block; border:4px solid #333; border-radius:10px; background:#fff; font-weight:bold; font-size:16px; color:#000; padding:10px 20px;'>Loading Data</div>
默认的loader error元素:
<div style='display:inline-block; border:4px solid #D00; border-radius:10px; background:#fff; font-weight:bold; font-size:16px; color:#590000; padding:10px 20px;'>Loading Error</div>
回调函数
点击单元格的回调函数
在用户鼠标左键点击单元格时的回调函数,可以在列数据中通过onClick
为每一列设置回调函数。
{title:"Name", field:"name", onClick:function(e, cell, value, data){ //e - the click event object //cell - the DOM element of the cell //value - the value of the cell //data - the data for the row the cell is in }, }
添加表格行的回调函数
$("#example-table").tabulator({ rowAdded:function(data){ //data - the data for the row }, });
编辑表格行的回调函数
$("#example-table").tabulator({ rowEdit:function(id, data, row){ //id - the id of the row //data - the data for the row //row - the DOM element of the row }, });
删除表格行的回调函数
$("#example-table").tabulator({ rowDelete:function(id){ //id - the id of the row }, });
表格行右键菜单的回调函数
$("#example-table").tabulator({ rowContext:function(e, id, data, row){ //e - the click event object //id - the id of the row //data - the data for the row //row - the DOM element of the row }, });
数据加载完毕的回调函数
$("#example-table").tabulator({ dataLoaded:function(data){ //data - the data for the row }, });
事件
事件 | 描述 |
dataLoading | 数据被完全加载 |
dataLoadError | 数据加载出错 |
renderStarted | 表格开始渲染 |
renderComplete | 表格渲染结束 |
sortStarted | 开始排序 |
sortComplete | 排序结束 |
Tabulator表格插件的github地址:https://github.com/olifolkerd/tabulator