datatables日常使用集合

datatables CDN链接地址:

<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/v/bs/dt-1.10.16/datatables.min.css"/>

<script type="text/javascript" src="https://cdn.datatables.net/v/bs/dt-1.10.16/datatables.min.js"></script>

1.datatables初始化

开发中许多页面都需要datatables,很多设置都是重复的,所以对其默认值做了统一设置。

默认值设置:

//默认错误模式是alert出异常信息,非常不友好,改成none后将不显示alert窗口
$.fn.dataTable.ext.errMode = 'none';
// 覆盖默认设置
$.extend($.fn.dataTable.defaults, {
    paging : true, // 分页
    lengthChange : false, // 长度
    searching : false, // 是否显示默认搜索
    info : true, // 是否显示列表信息
    autoWidth : true, // 是否自动宽度
    processing : true, // 是否显示'处理中'
    serverSide : true, // 是否是服务端处理
    ordering : true, // 是否支持排序
    ajax : {
        dataSrc : 'list', // 重置返回的JSON消息数据头,datatables默认是'data'
        type : 'POST', // 默认是post提交
        data : function(data) {
            // 自动获得form 表单的数据,并设置到data中提交查询
            var arrayInput = $("form :input");
            if (arrayInput != undefined && arrayInput.length > 0) {
                for (var i = 0; i < arrayInput.length; i++) {
                    data[arrayInput[i].id] = arrayInput[i].value;
                }
            }
            // 获得orderby条件,设置到orderby中提交查询
            var orderBy = '';
            for (var i = 0; i < data.order.length; i++) {
                order = data.order[i];
                column = data.columns[order.column];
                orderBy += ',' + column.data + " " + order.dir;
            }
            if (orderBy != '') {
                orderBy = orderBy.substr(1);
            }
            data.orderBy = orderBy;
            // 删除内置的列信息,排序信息,搜索信息
            // 不删除会全部提交到后台,数据量很大
            delete (data.columns);
            delete (data.order);
            delete (data.search);
        }
    },
    language : {
        decimal : "",
        emptyTable : "查无数据",
        info : "当前显示第 _START_ 至 _END_ 项,共 _TOTAL_ 项。",
        infoEmpty : "当前显示第 0 至 0 项,共 0 项",
        infoFiltered : "(由 _MAX_ 项结果过滤)",
        infoPostFix : "",
        thousands : ",",
        lengthMenu : "每页 _MENU_ 项",
        loadingRecords : "载入中...",
        processing : "处理中...",
        search : "搜索:",
        zeroRecords : "没有匹配结果",
        paginate : {
            "first" : "首页",
            "previous" : "上页",
            "next" : "下页",
            "last" : "末页"
        },
        aria : {
            "sortAscending" : ": 以升序排列此列",
            "sortDescending" : ": 以降序排列此列"
        }
    },
    drawCallback : function() {
        // 表格绘画完成后,自动添加第一个行“序号”列
        var api = this.api();
        var startIndex = api.context[0]._iDisplayStart;
        var columns = api.context[0].aoColumns;
        var columnIndex = -1;
        for (var i = 0; i < columns.length; i++) {
            if (columns[i].title == '序号') {
                columnIndex = i;
                break;
            }
        }
        if (columnIndex != -1) {
            api.column(columnIndex).nodes().each(function(cell, i) {
                cell.innerHTML = startIndex + i + 1;
            });
        }
    }
});

调用:

// 初始化表格
function initTable() {
    var i = -1;
    table = $('#dataTable').DataTable(
            {
                ajax : {
                    url : prefix + "/list2/"
                },
                columnDefs : [
                        {
                            targets : ++i,
                            title : '',
                            data : null,
                            render : function(data, type, row, meta) {
                                var result = '<input type="checkbox" value="'
                                        + row.dictID + '" />';
                                return result;
                            },
                            orderable : false
                        }, {
                            //默认值设置JS中会判断此列是否存在
                            title : "序号",
                            "searchable" : false,
                            "orderable" : false,
                            "targets" : ++i,
                            data : null,
                        }, {
                            title : "字典ID",
                            "searchable" : false,
                            "orderable" : false,
                            "targets" : ++i,
                            data : "dictID",
                        }, {
                            title : "数据字典名称",
                            "searchable" : false,
                            "orderable" : true,
                            "targets" : ++i,
                            data : "dictName",
                        }, {
                            title : "数据字典值",
                            "searchable" : false,
                            "orderable" : true,
                            "targets" : ++i,
                            data : "dictValue",
                        }],
                order : [ [ 5, 'asc' ] ]
            });
}

2.即时搜索

我的列表原来没有即时搜索效果,后来考虑把搜索条件做统一获得和提交,不要在各自的JS中每次提交。

就给搜索表单加一个id,且名字为search。这个时候发现就产生了即时搜索的效果,只要表单获得焦点或有输入。

列表就会自动带上条件查询。

image

3.刷新表格,保持在当前页

ajax.reload(null, false); //刷新后还保持在当前页面
ajax.reload(); //刷新后自动到第一页

官方链接:https://datatables.net/reference/api/ajax.reload()

4.列隐藏

通过列属性:className

示例代码:

columnDefs : [
    {
        targets : ++i,
        title : '',
        data : null,
        orderable : false,
        className : $('isValid').val() == '2' ? ''
                : 'hidden',
        render : function(data, type, row, meta) {
            var result = '<input type="checkbox" value="'
                    + row.detailID + '" />';
            return result;
        }
    }, {
        title : "序号",
        "searchable" : false,
        "orderable" : false,
        "targets" : ++i,
        data : null,
    }]

5.销毁table

table.destroy(); // table是datatable的实例变量
$('#dataTable').empty(); // 清空table的html,这一步必须要有,否则会清除不干净

原文地址:https://www.cnblogs.com/huiy/p/9211837.html