DataTables 列、columnDefs 和 rowCallback HTML5 初始化
DataTables columns, columnDefs and rowCallback HTML5 initialisation
我目前有一个数据表(版本 1.10.18)加载了几个 js 选项,但我需要使我的代码更具可重用性,我正在尝试使用 html5 data-* 初始化我的数据表属性。
<table id="dataTable" cellspacing="0" width="100%" data-source="ajax.mysource.php">
<thead>
<tr>
<th>Name</th>
<th>Address</th>
<th><i class="fas fa-low-vision"></i></th>
</tr>
</thead>
</table>
我的 jQuery 代码如下:
var dataTable = $('#dataTable').DataTable({
processing: true,
serverSide: true,
ajax: $('#dataTable').data('source'),
columns: [
{ 'data': 'name' },
{ 'data': 'address' },
{ 'data': 'visible' }
],
order: [[ 1, 'asc' ], [ 0, 'asc' ]],
responsive: true,
nowrap: true,
pageLength: 15,
lengthChange: false,
select: 'single',
columnDefs: [
{ targets: 0, width: "110px" },
{ targets: 1, width: "150px" },
{ targets: 1, render: $.fn.dataTable.render.ellipsis(80) },
{ targets: 2, render: $.fn.dataTable.render.visibilityIcon() }
],
rowCallback: function(row, data, index) {
if (data.visible == "0") {
$(row).addClass("notVisible");
}
}
});
我会为每个数据表使用一些共同的选项,但如果我可以使用 html5 数据直接在我的 html 中设置列、columnDefs 和 rowCallBack,那就太好了- * 属性,这样我就可以对不同的表使用相同的代码,例如:
<th data-columns="address" data-column-defs="{targets: 1, width:'150px'}" data-row-callback="function...">Address</th>
除了排序、排序和页面长度之外,我还没有找到如何使用 html5-* 属性。
使用 html5 设置此选项实际上可以使用 datatables.js 吗?
首先你需要 1.10.5 版本 here
As of v1.10.5 DataTables can also use initialisation options read from HTML5 data-* attributes
然后您必须将数据属性放入 table 元素而不是列元素。
<table id="example"
data-column-defs='[{"targets": 0, "width": "200px"}]'
data-page-length='2'
data-class="dataTable"
data-order='[[ 1, "asc" ]]'
data-columns='[{"data": "name"}, {"data": "position"}]'
>
<thead>
<tr>
<th>Name</th>
<th>Position</th>
<th>Salary</th>
<th>Start Date</th>
<th>office</th>
</tr>
</thead>
</table>
这是为您准备的完整代码段
var data = [
{
"name": "Tiger Nixon",
"position": "System Architect",
"salary": ",120",
"start_date": "2011/04/25",
"office": "Edinburgh"
},
{
"name": "Garrett Winters",
"position": "Director",
"salary": ",300",
"start_date": "2011/07/25",
"office": "Edinburgh"
},
{
"name": "Jane Doe",
"position": "SW Architect",
"salary": ",300",
"start_date": "2011/07/25",
"office": "Edinburgh"
},
{
"name": "John Doe",
"position": "SW Developer",
"salary": ",300",
"start_date": "2011/07/25",
"office": "Edinburgh"
}
];
var oTable = $('#example').dataTable({
data: data
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link href="https://cdn.datatables.net/1.10.19/css/jquery.dataTables.min.css" rel="stylesheet"/>
<script src="https://cdn.datatables.net/1.10.5/js/jquery.dataTables.min.js"></script>
<table id="example"
data-column-defs='[{"targets": 0, "width": "200px"}]'
data-page-length='2'
data-class="dataTable"
data-order='[[ 1, "asc" ]]'
data-columns='[{"data": "name"}, {"data": "position"}]'
>
<thead>
<tr>
<th>Name</th>
<th>Position</th>
<th>Salary</th>
<th>Start Date</th>
<th>office</th>
</tr>
</thead>
</table>
我目前有一个数据表(版本 1.10.18)加载了几个 js 选项,但我需要使我的代码更具可重用性,我正在尝试使用 html5 data-* 初始化我的数据表属性。
<table id="dataTable" cellspacing="0" width="100%" data-source="ajax.mysource.php">
<thead>
<tr>
<th>Name</th>
<th>Address</th>
<th><i class="fas fa-low-vision"></i></th>
</tr>
</thead>
</table>
我的 jQuery 代码如下:
var dataTable = $('#dataTable').DataTable({
processing: true,
serverSide: true,
ajax: $('#dataTable').data('source'),
columns: [
{ 'data': 'name' },
{ 'data': 'address' },
{ 'data': 'visible' }
],
order: [[ 1, 'asc' ], [ 0, 'asc' ]],
responsive: true,
nowrap: true,
pageLength: 15,
lengthChange: false,
select: 'single',
columnDefs: [
{ targets: 0, width: "110px" },
{ targets: 1, width: "150px" },
{ targets: 1, render: $.fn.dataTable.render.ellipsis(80) },
{ targets: 2, render: $.fn.dataTable.render.visibilityIcon() }
],
rowCallback: function(row, data, index) {
if (data.visible == "0") {
$(row).addClass("notVisible");
}
}
});
我会为每个数据表使用一些共同的选项,但如果我可以使用 html5 数据直接在我的 html 中设置列、columnDefs 和 rowCallBack,那就太好了- * 属性,这样我就可以对不同的表使用相同的代码,例如:
<th data-columns="address" data-column-defs="{targets: 1, width:'150px'}" data-row-callback="function...">Address</th>
除了排序、排序和页面长度之外,我还没有找到如何使用 html5-* 属性。
使用 html5 设置此选项实际上可以使用 datatables.js 吗?
首先你需要 1.10.5 版本 here
As of v1.10.5 DataTables can also use initialisation options read from HTML5 data-* attributes
然后您必须将数据属性放入 table 元素而不是列元素。
<table id="example"
data-column-defs='[{"targets": 0, "width": "200px"}]'
data-page-length='2'
data-class="dataTable"
data-order='[[ 1, "asc" ]]'
data-columns='[{"data": "name"}, {"data": "position"}]'
>
<thead>
<tr>
<th>Name</th>
<th>Position</th>
<th>Salary</th>
<th>Start Date</th>
<th>office</th>
</tr>
</thead>
</table>
这是为您准备的完整代码段
var data = [
{
"name": "Tiger Nixon",
"position": "System Architect",
"salary": ",120",
"start_date": "2011/04/25",
"office": "Edinburgh"
},
{
"name": "Garrett Winters",
"position": "Director",
"salary": ",300",
"start_date": "2011/07/25",
"office": "Edinburgh"
},
{
"name": "Jane Doe",
"position": "SW Architect",
"salary": ",300",
"start_date": "2011/07/25",
"office": "Edinburgh"
},
{
"name": "John Doe",
"position": "SW Developer",
"salary": ",300",
"start_date": "2011/07/25",
"office": "Edinburgh"
}
];
var oTable = $('#example').dataTable({
data: data
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link href="https://cdn.datatables.net/1.10.19/css/jquery.dataTables.min.css" rel="stylesheet"/>
<script src="https://cdn.datatables.net/1.10.5/js/jquery.dataTables.min.js"></script>
<table id="example"
data-column-defs='[{"targets": 0, "width": "200px"}]'
data-page-length='2'
data-class="dataTable"
data-order='[[ 1, "asc" ]]'
data-columns='[{"data": "name"}, {"data": "position"}]'
>
<thead>
<tr>
<th>Name</th>
<th>Position</th>
<th>Salary</th>
<th>Start Date</th>
<th>office</th>
</tr>
</thead>
</table>