jQuery Datatable插件 表格基本初始化

jQuery Datatable插件 表格基本初始化

本文介绍jQuery Datatable插件的表格初始化的基本使用,Datatable是目前使用度比较高的前端表格界面插件,可以很方便地创建响应式的表格,容易实现表格的翻页、过滤、排序等功能。


引入文件

<script type="text/javascript" src="./plugin/jquery/jquery-1.11.2.js"></script>
<script type="text/javascript" src="./script/jquery.dataTables-1.10.12.min.js"></script>
<script type="text/javascript" src="datatableController.js"></script>

以上脚本文件依次为jQuery脚本文件,dataTable脚本文件和我们自己编码的dataTable初始化脚本。

<link href="./plugin/bootstrap/css/bootstrap.min.css" rel="stylesheet" />
<link href="./css/jquery.dataTables.min.css" rel="stylesheet"/>
<link href="./css/dataTables.bootstrap.min.css" rel="stylesheet"/>

以上为引入的样式文件,第一个为bootstrap框架样式,其中第二和第三个可以二选一,分别为基于jQuery和Bootstrap的datatable样式。

注意:使用基于jQuery的datatable样式,需要在项目根目录下建立文件夹images,其中放入datatable插件中的资源图片(主要显示排序图标)
这里写图片描述

其中jQuery样式大致为:
这里写图片描述
bootstrap样式:
这里写图片描述

html编码

由于本文介绍的编码方式为在脚本中对表格进行初始化,表格的参数和数据均在脚本中定义,html中只有一个div标签用来定位。

<div class="col-md-10 col-md-offset-1" id="testTable_div"></div>

其中col-md-10 col-md-offset-1表示bootstrap布局,使用中型屏幕时占页面10列(一共12列),offset表示左外边距偏移一列。

js编码

表格的初始化代码都在js脚本中进行。

提示信息

-首先,定义表格的提示信息,可以做国际化,为了看起来方便这里直接赋值:

var language = {
        "processing": "<img src='loading-spinner-grey.gif'/><span>&nbsp;&nbsp;"+"处理中..."+"</span>",
        "lengthMenu": "每页 _MENU_ 条结果",
        "zeroRecords": "没有匹配结果",
        "info": "<span class='seperator'>  </span>" + "总共找到 _TOTAL_ 条结果",
        "infoFiltered": " (从所有 _MAX_ 条记录中得到)",
        "infoEmpty": "共 0 项",
        "emptyTable": "表中数据为空",
        "paginate": {
            "previous": "前页",
            "next": "下页",
            "first": "第一页  ",
            "last": "  尾页"
        }
    };

代码解析:

  • processing 为表格初始化过程中显示的等待信息,这里引入了加载圆圈的动态图并设置文本”处理中…“
  • lengthMenu 为可选择的表格每页显示多少条结果,”_MENU_“对应选择的下拉菜单
  • zeroRecords 为表格搜索过滤结果为空的提示,emptyTable为表空的提示,均显示在表格中
  • info、infoFiltered、infoEmpty均显示在表格外,为表格数据信息
  • paginate 为表格翻页选项,previous、next、first、last对应不同的导航标签
表头初始化

然后,是对表头的初始化,其中表头的字段和参数对应之后填充到表格的数据和属性:

var column=[
            {"data": "id", name:"ID", "orderable":true},
            {"data": "name", name:"Name" , "orderable":false },
            {"data": "gender", name:"Gender" , "orderable":false },
            {"data": "age", name:"Age" , "orderable":false },
           ];

var divId='testTable_div';
var tableId='testTable';

var tableEleStr = '<table class="table table-striped table-bordered table-hover" id='+tableId+'>'
        + '<thead>'
        +'<tr role="row" class="heading" >'
        + '</tr>'
        + '</thead>'
        +'<tbody>'
        +'</tbody>'
        +'</table>';

    $('#'+ divId).append(tableEleStr);

    var trEle = $('#'+ tableId  + ' > thead >tr');
    for ( var one in column){
        var th = '<th>' + column[one].name + '</th>';
        trEle.append(th);
    }

代码解析:

  • 其中column中,data为表头对应每一列的字段,name为表头显示的名称,orderable表示此列是否可排序
  • 之后的代码为使用选择器定位到html中的div标签$(‘#’+ divId),在其中添加表格子元素,并根据column初始化表头
datatable表格初始化

以下为对jQuery插件datatable的调用,初始化表格:

    var table = $("#" + tableId).DataTable({
        "dom": '<"top"frt><"bottom"lip>',
        "language": language,  //language
        "paginate": true,  // page button
        "searching": true,  // search bar
        "autoWidth":true,  //automatically set the column width
        "lengthChange": true,  // record number in each row
        "displayLength": 5,  // row number in each page
        "lengthMenu":[[5,10,20,-1],[5,10,20,"All"]],
        "ordering":true ,  // sort
        "info": true,  // Showing info
        "scrollY": 300,
        "scrollCollapse": true,
        "pagingType": "full",  // page style
        "processing": true,
        "serverSide": false,
        "destroy": true,
        "ajaxSource": "json.txt",
        "columns": column,
        "columnDefs": [
            {

                defaultContent: '',
                targets: [ '_all' ]
            }
        ],
        /*"fnServerData": function (sSource, aoData, fnCallback, oSettings) {                    
               oSettings.jqXHR = $.ajax({
                "type": 'get',
                "url": sSource,
                "dataType": "JSON",
                "success": function (resp) {                                       
                    oSettings.iDraw = oSettings.iDraw + 1;

                    resp = resp.data || [];
                    var data = {};
                    data.aaData = resp;
                    var totalCounts = resp.length;

                    data.iTotalRecords = totalCounts;
                    data.iTotalDisplayRecords = totalCounts;
                    data.sEcho = oSettings;
                    fnCallback(data);
                },
                "error": function(resp) {
                    var data = {};
                    data.aaData = [];
                    var totalCounts = 0;

                    data.iTotalRecords = totalCounts;
                    data.iTotalDisplayRecords = totalCounts;
                    data.sEcho = oSettings;
                    fnCallback(data);
                }
            });

        }*/
    });

代码解析:

  • $(“#” + tableId).DataTable(); 为datatable初始化函数,选择器定位到表格调用
  • DataTable()函数中可设置不同的参数(不设置则使用默认值)
  • dom 参数设置表格控件的显示,
    l - length changing input control
    f - filtering input
    t - The table
    i - Table information summary
    p - pagination control
    r - processing display element
    这里’<”top”frt><”bottom”lip>’表示,在表格上方显示处理提示控件和搜索过滤控件,表格下方显示翻页、数据结果信息和选择显示数据个数控件
  • language 即用之前定义的language变量赋值
  • paginate、searching、autoWidth、lengthChange、ordering、info、processing分别设置boolean表示是否实现翻页、过滤、自动响应列宽度、每页显示数据个数选择、排序、提示信息和处理等待控件
  • “displayLength”: 5 表示每页显示数据个数
    “lengthMenu”:[[5,10,20,-1],[5,10,20,”All”]] 表示下拉控件选择的条目,”All“对应-1即全部显示
  • “scrollY”: 300,
    “scrollCollapse”: true, 两个参数配合使用,表示给定表格固定的高度,在显示数据超过该高度时添加滚动条
  • “pagingType”: “full” 表示翻页控件的格式,另外的格式为numbers、simple、simple_numbers、full_numbers
  • “serverSide”: false, 表示过滤等功能不在服务端处理,在客户端处理(当表格中数据量特别大时,设置为true在服务端处理比较合适)
    “destroy”: true, 表示初始化表格时,把选择器对应已有的表格替换掉

  • “ajaxSource”: “json.txt”, 为读取表格数据的ajax数据源,这里为文本文件
    “columns”: column, 设置为之前定义的column变量
    “columnDefs”: [
    {

            defaultContent: '',
            targets: [ '_all' ]
        }
    ],
    

    columnDefs用来设置列的特定属性,这里表示当传入数据为null或undefined时单元格默认显示空(避免提示错误警告),target为所有列

  • 以上已经实现了表格的初始化,注释的 fnServerData 为对服务端获取数据的处理函数,不自定义的情况下有默认的实现,这里主要在出现error时将表格置空而不是提示错误

注意事项及遇到的问题

以上对datatable使用的说明,特别是参数的意义可以参阅:
https://datatables.net/reference/index

遇到的问题

也遇到一些不容易查到的问题,给出自己的解决方案:

这里写图片描述
- 在 “ajaxSource”: “json.txt” 获取文本文件,直接用浏览器打开网页,会出现xmlhttpRequestError,解决办法为将项目和文本文件都放入tomcat服务端并启动服务,通过服务端获取数据,或者自己启一个服务亦可
- json格式问题:ajaxSource会将json格式文本解析为json对象,文本要符合json格式这里json.txt为
{"data":[{"id":"1","name":"A","gender":"male","age":"25"},{"id":"2","name":"B","gender":"male","age":"25"},{"id":"3","name":"C","gender":"male","age":"25"},{"id":"4","name":"D","gender":"male","age":"25"},{"id":"5","name":"E","gender":"male","age":"25"},{"id":"6","name":"F","gender":"male","age":"25"},{"id":"7","name":"G","gender":"male","age":"25"},{"id":"8","name":"H","gender":"male","age":"25"},{"id":"9","name":"I","gender":"male","age":"25"},{"id":"10","name":"J","gender":"male","age":"25"},{"id":"11","name":"K","gender":"male","age":"25"}]}

  • 且json字段需与columns选项定义的列”data“字段对应(即表头),才能正确填充数据到表格,当json无法匹配时会提示错误,设置columnDefs解决

总结

在使用datatable过程中发现,datatable实现方式比较简单而且比较容易扩展,但也会遇到很多问题查阅API也无法解决,还有1.10版本之后很多参数和方法有了很大不同容易混淆。本文简单介绍datatable表格基本初始化,之后再介绍更加实用的进阶例子。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值