插件DataTable — DataTable插件使用总结

1、问题

      公司要替换一个前端表格插件,最后选择了DataTable,中文官方文档地址:http://datatables.club/manual/

2、解决

      2.1、需要引入样式文件和JS文件

               <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" />
               <link rel="stylesheet" href="https://cdn.datatables.net/1.10.20/css/dataTables.bootstrap.min.css" />

               <script type="text/javascript" src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
               <script type="text/javascript" src="http://cdn.datatables.net/1.10.15/js/jquery.dataTables.js"></script>
               <script type="text/javascript" src="https://cdn.datatables.net/1.10.20/js/dataTables.bootstrap.min.js"></script>

     2.1、页面布局

              <div data-options="region:'center',border:false">
             @* 动态显示显示或隐藏列,注:data-column 是第N列对应的数字 *@
                   <div style="margin: -12px 0 15px -13px;">
                        显示 / 隐藏列:
                        <a class="toggle-vis" data-column="2">订单单号</a> -
                       <a class="toggle-vis" data-column="3">采购客户</a> -
                       <a class="toggle-vis" data-column="4">所属办事处</a> -
                       <a class="toggle-vis" data-column="11">创建时间</a>
                  </div>
                  <table id="SaleOrder"></table>
              </div>

   2.3、JS绘制加载表格

         var toggleTable = $('#SaleOrder').DataTable({
                searching: false, //禁用原生搜索
                processing: true, //隐藏加载提示,自行处理
                deferRender: true, //延迟渲染可以提高Datatables的加载速度
                autoWidth: false, //禁用自动调整列宽
                serverSide: true, //启用服务器端分页
                stateSave: false, //状态保存,再次加载页面时还原表格状态
                ordering: false, //排序总开关,是否开启排序功能
                order: [], //取消默认排序查询,否则复选框一列会出现小箭头
                orderMulti: true, //启用多列排序
                orderable: true,
                renderer: "bootstrap", //渲染样式:Bootstrap和jquery-ui
                stripeClasses: ["odd", "even"], //为奇偶行加上样式,兼容不支持CSS伪类的场合
                //scrollY: 300, //表格的固定高
                //scrollCollapse: true, //开启滚动条(需要配合表格的固定高)
                paginate: true, //分页总开关
                paging: true, //表格分页
                pageLength: 20, //首次加载的数据条数
                dom: '<t><lfip>', //分页显示位置
                lengthChange: true, //是否允许用户改变表格每页显示的记录数
                lengthMenu: [10, 15, 20, 30, 100, -1],//[[10, 15, 20, 30, 100, -1], [10, 15, 20, 30, 100, "全部"]], //每页多少项,第一个数组是表示的值,第二个数组用来显示
                pagingType: "full_numbers", //分页样式:simple,simple_numbers,full,full_numbers
                ajax: function (data, callback, settings) {
                    //封装请求参数
                    searchdata.rows = data.length; //页面显示记录条数,在页面显示每页显示多少项的时候
                    searchdata.start = data.start; //开始的记录序号
                    searchdata.page = (data.start / data.length) + 1; //当前页码

                    //console.log("searchdata:" + JSON.stringify(searchdata));
                    //ajax请求数据
                    $.ajax({
                        url: UrlGetSelloffOrderPage,
                        type: "POST",
                        cache: false,
                        data: searchdata,
                        //dataType: "json",
                        //contentType: 'application/json;charset=utf-8',
                        //beforeSend: function (request) {
                        //    request.setRequestHeader("token", localStorage.token);
                        //},
                        success: function (result) {
                            //console.log("result:" + JSON.stringify(result));
                            //封装返回数据
                            //var returnData = {};
                            //returnData.draw = data.draw; //这里直接自行返回了draw计数器,应该由后台返回
                            //returnData.recordsTotal = result.total; //返回数据全部记录
                            //returnData.recordsFiltered = result.total; //后台不实现过滤功能,每次查询均视作全部结果
                            //returnData.data = result.data; //重新封装返回的数据列表

                            //var list = result.rows;
                            //for (i = 0; i < list.length; i++) {
                            //    returnData.data[i] = {};
                            //    returnData.data[i].OrderID = list[i].OrderID;
                            //    returnData.data[i].OrderNo = list[i].OrderNo;
                            //    returnData.data[i].OrderUser = list[i].OrderUser;
                            //    returnData.data[i].DepartmentName = list[i].DepartmentName;
                            //    returnData.data[i].TotalAmount = list[i].TotalAmount;
                            //    returnData.data[i].OrderStatus = list[i].OrderStatus;
                            //    returnData.data[i].PayStatus = list[i].PayStatus;
                            //    returnData.data[i].PlantPayStatus = list[i].PlantPayStatus;
                            //    returnData.data[i].PlatPayStatus = list[i].PlatPayStatus;
                            //    returnData.data[i].OrderReturnStatus = list[i].OrderReturnStatus;
                            //    returnData.data[i].CreateTime = list[i].CreateTime;
                            //}
                            //console.log('returnData:' + JSON.stringify(returnData))
                            //console.log('returnData:');
                            //调用DataTables提供的callback方法,代表数据已封装完成并传回DataTables进行渲染
                            //此时的数据需确保正确无误,异常判断应在执行此回调前自行处理完毕
                            console.log(JSON.stringify(result))
                            callback(result);
                        }
                    })
                },
                columnDefs: [
                    {
                        targets: [0,12],
                        sortable: false
                    },
                    {
                        targets: [2, 3, 4, 5, 6, 7, 8, 9, 10, 11],
                        sortable: true
                    }
                ],

                columns: [
                    {
                        title: '序号', width: '56px', className: 'text-center whiteSpace',
                        render: function (data, type, row, meta) {
                            return meta.row + 1 + meta.settings._iDisplayStart;
                        }
                    },
                    { title: '订单id', data: "OrderID", "visible": false, width: 60, align: "center"},
                    { title: '订单单号', data: 'OrderNo', width: 100, align: "center" },
                    { title: '采购客户', data: 'OrderUser', width: 60, align: "center" },
                    { title: '所属办事处', data: 'DepartmentName', width: 150, align: "center" },
                    {
                        title: '订单总金额', data: 'TotalAmount', width: 60, align: "center",
                        render: function (data, type, row, meta) {
                            return data.toFixed(2);
                        }
                    },
                    {
                        title: '订单状态', data: 'OrderStatus', width: 60, align: "center",
                        render: function (data, type, row, meta) {
                            var result = "";
                            if (!comboxObj) return result;
                            return comboxObj.BindStatus("OrderStatus", data + "", true);
                        }
                    },
                    {
                        title: '客户订单支付状态', data: 'PayStatus', width: 100, align: "center",
                        render: function (data, type, row, meta) {
                            var result = "";
                            if (!comboxObj) return result;
                            return comboxObj.BindStatus("PayAmountStatus", data + "", true);
                        }
                    },
                    {
                        title: '办事处代销品支付状态', data: 'PlantPayStatus', width: 120, align: "center",
                        render: function (data, type, row, meta) {
                            var result = "";
                            if (!comboxObj) return result;
                            return comboxObj.BindStatus("PayAmountStatus", data + "", true);
                        }
                    },
                    {
                        title: '平台代销品支付状态', data: 'PlatPayStatus', width: 120, align: "center",
                        render: function (data, type, row, meta) {
                            var result = "";
                            if (!comboxObj) return result;
                            return comboxObj.BindStatus("PayAmountStatus", data + "", true);
                        }
                    },
                    {
                        title: '客户退货状态', data: 'OrderReturnStatus', width: 80, align: "center",
                        render: function (data, type, row, meta) {
                            var result = "-";
                            if (!comboxObj) return result;
                            return comboxObj.BindStatus("GoodsReturnStatus", data + "", true);
                        }
                    },
                    {
                        title: '创建时间', data: 'CreateTime', width: 80, align: "center",
                        render: function (data, type, row, meta) {
                            if (data == null || data == '') {
                                return '';
                            }
                            var dt = parseToDate(data);
                            return dt.format("yyyy-MM-dd hh:mm:ss");
                        }
                    },
                    {
                        title: '操作', width: '40px',
                        render: function (data, type, row, meta) {
                            var buttonRightCodes = getRightCodes();
                            return '<a href="javascript:void(0)" rightcode="570301" style="dispaly:none;" onclick="parent.open(\'代销销售订单详情\',\'/PlantSaleOrder/Detail?id=' + row.OrderID + '\',\'' + buttonRightCodes + '\')">查看详情</a>';
                        }
                    }
                ],
                language: {
                    "sProcessing": "处理中...",
                    "buttons.copy": "复制",
                    "buttons.print": "打印",
                    "sLengthMenu": "_MENU_",
                    "sZeroRecords": "没有匹配结果",
                    "sInfo": "显示第 _START_ 至 _END_ 项结果,共 _TOTAL_ 项",
                    "sInfoEmpty": "显示第 0 至 0 项结果,共 0 项",
                    "sInfoFiltered": "(由 _MAX_ 项结果过滤)",
                    "sInfoPostFix": "",
                    "sSearch": "搜索:",
                    "sUrl": "",
                    "sEmptyTable": "表中数据为空",
                    "sLoadingRecords": "载入中...",
                    "sInfoThousands": ",",
                    "oPaginate": {
                        "sFirst": "首页",
                        "sPrevious": "上页",
                        "sNext": "下页",
                        "sLast": "末页"
                    },
                    "oAria": {
                        "sSortAscending": ": 以升序排列此列",
                        "sSortDescending": ": 以降序排列此列"
                    }
                }
            });

            //动态显示或隐藏列,
            $('a.toggle-vis').on('click', function (e) {
                e.preventDefault();
                //获取列API对象
                var column = toggleTable.column($(this).attr('data-column'));
                //切换或隐藏
                column.visible(!column.visible());
            });

3、总结

      部分属性说明可参考官方文档

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用 Bootstrap 插件 DataTable,首先需要在 HTML 文件中引入相关的 CSS 和 JS 文件。可以在 Bootstrap 的官网上下载最新版的 DataTable,也可以通过 CDN 引入。 ```html <!-- 引入 DataTable 的 CSS 文件 --> <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.24/css/dataTables.bootstrap4.min.css"> <!-- 引入 jQuery 和 DataTable 的 JS 文件 --> <script src="https://code.jquery.com/jquery-3.5.1.js"></script> <script src="https://cdn.datatables.net/1.10.24/js/jquery.dataTables.min.js"></script> <script src="https://cdn.datatables.net/1.10.24/js/dataTables.bootstrap4.min.js"></script> <!-- DataTable 的 HTML 代码 --> <table id="example" class="table table-striped table-bordered" style="width:100%"> <thead> <tr> <th>Name</th> <th>Position</th> <th>Office</th> <th>Age</th> <th>Start date</th> <th>Salary</th> </tr> </thead> <tbody> <tr> <td>Tiger Nixon</td> <td>System Architect</td> <td>Edinburgh</td> <td>61</td> <td>2011/04/25</td> <td>$320,800</td> </tr> <tr> <td>Garrett Winters</td> <td>Accountant</td> <td>Tokyo</td> <td>63</td> <td>2011/07/25</td> <td>$170,750</td> </tr> <!-- 更多数据 --> </tbody> </table> ``` 然后在 JavaScript 中,使用以下代码初始化 DataTable: ```javascript $(document).ready(function() { $('#example').DataTable(); } ); ``` 这样就可以将表格转换为 DataTable,添加搜索、排序、分页等功能。需要注意的是,表格必须使用 `id` 属性,并且在 JavaScript 中使用该 `id` 来初始化 DataTable。如果你想自定义 DataTable 的配置,可以在初始化时传入一个配置对象,例如: ```javascript $(document).ready(function() { $('#example').DataTable({ "paging": true, "ordering": true, "info": true }); }); ``` 这里只是简单地介绍了 DataTable使用方法,更多高级功能可以参考官方文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值