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