最近在自己写的一些玩具内经常要用到表格,在用html+jquery实现了一些后,深感麻烦,于是便找了一个插件来用用
前段时间,写了几个统计游戏信息的网页:
里面都涉及到很多表格的操作,我都是用jquery来简单操纵,对于这样功能不复杂的网页已经足够
但是最近写的几个页面要设计大量关于表格的操作,于是便找了个jquery表格插件Datatables来用用
关于Datatables
起步
你需要
- 引入Datatables的js和css文件
- 在html内画一个table
- 执行$(‘table的选择器’).datatable();
根据服务器返回的数据初始化表格
Datatables使用的数据源必须是一个数组,数组里的每一项将显示在你定义的行上面, datatables可以使用三种基本的javascript数据类型来作为数据源:
- 数组(Arrays [])
- 对象(objects {})
- 实例(new myclass())
下面说下用的比较多的从对象初始化
对象格式:
var vehicleData=
[
{
"id":"12",
"plateNumber":"苏A0651",
"ownerName":"张全蛋",
"ownerTel":"233",
"ownerIdNumber":"9527",
"ownerAddress":"南京"
},
{
"id":"13",
"plateNumber":"苏B001",
"ownerName":"唐马儒",
"ownerTel":"344",
"ownerIdNumber":"1234",
"ownerAddress":"南京"
}
]
html:
<table id="vehicleTable">
<thead>
<tr>
<th></th>
<th></th>
<th></th>
<th></th>
<th></th>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
</tbody>
</table>
创建表格:
$('#vehicleTable').dataTable({
data:vehicleData,
columnDefs: [
{
targets: 0,
data:'id',
title:'id'
},
{
targets:1,
data:'plateNumber',
title:'车牌'
},
{
targets:3,
data:'ownerName',
title:'车主'
},
{
targets:4,
data:'ownerTel',
title:'电话'
},
{
targets:5,
data:'ownerIdNumber',
title:'车主身份证'
},
{
targets:6,
data:'ownerAddress',
title:'地址'
}
]
});
使用columnDefs参数给列定义,使用targets告诉这个定义是指向哪一列 data用来设置列的数据源,title设定该列的标题。
有些数据不希望显示在屏幕上,或者需要什么条件才会显示,可以使用visible选项来控制
如:
{
targets: 0,
data:'id',
title:'id',
visible: false
}
一般来讲,隐藏时也要禁止该数据参与排序与搜索:
{
targets: 0,
data:'id',
title:'id',
visible: false,
searchable: false,
orderable: false
}
这样,一张表格就会展示出来了
此处仅展示外观仅是表格主体部分,因为一些原因不便于加载js,并不能实现全部功能,
一个完整的Datatables表格 例子
车牌 | 车主 | 电话 | 车主身份证 | 地址 |
---|---|---|---|---|
苏A0651 | 张全蛋 | 233 | 9527 | 南京 |
苏B001 | 唐马儒 | 344 | 1234 | 南京 |
如果想给每一行增加几个操作按钮,使用defaultContent:
columnDefs:
[
//前面的省略
{
targets:7,
data:null,
searchable:false,
orderable:false,
defaultContent:'<button type="button" class="btn btn-danger btn-sm vehicle-del">删除</button>' +
'<button type="button" class="btn btn-primary btn-sm vehicle-update">更改</button>'
}
]
结果:
车牌 | 车主 | 电话 | 车主身份证 | 地址 | 操作 |
---|---|---|---|---|---|
苏A0651 | 张全蛋 | 233 | 9527 | 南京 | |
苏B001 | 唐马儒 | 344 | 1234 | 南京 |
我们是需要根据按钮执行一些操作的,因为按钮是动态添加上的,所以监听的绑定要放在回调函数里
通过rowCallback回调函数为每一个button添加数据的id
在每一行绘制后,会调用该函数,其包含三个参数:
- row:该行的dom元素
- data:该行的源数据
- index: 该行的序列
在dataTable方法内可以这样写:
columnDefs: [
//前面的省略
rowCallback:function( row, data, index ){
var id=data.id;
$('td',row).last().find('button').attr('vehicleId',id).attr("index",index);
}
]
在drawCallback回调函数内绑定监听
当每次表格重绘的时候触发drawCallback,比如更新数据后或者创建新的元素
drawCallback:function(){
$('.vehicle-del').click(function(){
dosomethig
});
$('.vehicle-update').click(function(){
dosomethig
});
}
进阶:使用api内提供的row()与row().data()实现上文功能
使用两个回调函数来实现一个简单的功能看起来实在是太蠢了,于是遍访api后我发现了这样一个函数
row():Working with rows is a fundamental part of DataTables, and you want to be able to easily select the rows that you want from the table.
简单来讲,使用row()得到点击事件所发生的行,然后使用row().data()函数拿到该行数据
例子:
$('#vehicleTable tbody').on('click','button',function(){
var tr=$(this).parents('tr');
var rowData=table.api().row(tr).data();
//此处rowData即该行数据
dosomethig
}