datatables项目心得

最近在做后台管理系统,普遍用到了datatables这个插件,挺好用的,由于第一次用走了好多弯路,记下来吧!中文官网的上api可以看看的还是http://www.datatables.club/

  1. 关于进入详情返回上一页的页码
    开始走了好多弯路,从后台传入页码值放到href里,到详情页获取到页码数然后放到localStorage里,然后就可以再返回上一页时就可以获取到页码数。这个方法固然可以,是常规的思想,但是datatables插件里就有初始化的配置!bStateSave: true(状态保存),但是又有个问题,就是返回时及时在刷新也会是保存的状态,没有什么办法,只能清楚缓冲localStorage.clear();但是浏览器上的刷新按钮还是个bug。。
  2. 关于增加跳转到指定页面的input
    网上查了好多方法,都是修改插件的源文件,可以不用,直接在ajax返回后执行就可以了!代码如下:
//增加跳转指定页数功能
$("<span style='margin:0 10px 0 10px;'>到第</span><input type='text' id='changePage' class='input-text' style='width:50px;height:27px'><span style='margin-left:10px;'>页</span>").appendTo('ul.pagination');
$('#changePage').keydown(function(e){
                if(e.keyCode==13){
                  oTable = $("#newrecords").dataTable();
                  if($(this).val() && $(this).val()>0){
                  var redirectpage = $(this).val()-1;
                 }else{
                     var redirectpage = 0;
                  }
                oTable.fnPageChange( redirectpage );
                }
           });

附上一个完整的项目中部分:

<script src="/dist/js/jquery.dataTables.min.js"></script>
<script src="/dist/js/dataTables.bootstrap.min.js"></script>

<script>
//分页
$(function () {
    var lang = {
      "sProcessing": "处理中...",
      "sLengthMenu": "每页 _MENU_ 项",
      "sZeroRecords": "没有匹配结果",
      "sInfo": "当前显示第 _START_ 至 _END_ 项,共 _TOTAL_ 项。",
      "sInfoEmpty": "当前显示第 0 至 0 项,共 0 项",
      "sInfoFiltered": "",
      "sInfoPostFix": "",
      "sSearch": "搜索:",
      "sUrl": "",
      "sEmptyTable": "表中数据为空",
      "sLoadingRecords": "载入中...",
      "sInfoThousands": ",",
      "oPaginate": {
      "sFirst": "首页",
      "sPrevious": "上页",
      "sNext": "下页",
      "sLast": "末页",
      "sJump": "跳转"
      },
      "oAria": {
        "sSortAscending": ": 以升序排列此列",
        "sSortDescending": ": 以降序排列此列"
      }
    };
    var table = $("#newrecords").dataTable({
      language:lang,  //提示信息
      autoWidth: false,  //禁用自动调整列宽
      stripeClasses: ["odd", "even"],  //为奇偶行加上样式,兼容不支持CSS伪类的场合
      processing: true,  //隐藏加载提示,自行处理
      serverSide: true,  //启用服务器端分页
      searching: true,  //禁用原生搜索
      orderMulti: false,  //启用多列排序
      searchable:true,
      bStateSave: true,  //状态保存
      order: [],  //取消默认排序查询,否则复选框一列会出现小箭头
//      renderer: "bootstrap",  //渲染样式:Bootstrap和jquery-ui
      pagingType: "simple_numbers",  //分页样式:simple,simple_numbers,full,full_numbers
      "columnDefs": [{
        "bSortable": false,//指定某列不可排序
        "aTargets": [4,10,11,12]//指定某列不可排序
      }],
//      "order": [[0, 'asc']],//默认按照第一行排序



      ajax: function (data, callback, settings) {
        //封装请求参数
        var param = {};
        param.limit = data.length;//页面显示记录条数,在页面显示每页显示多少项的时候
        param.draw = data.draw;    
        param.search =data.search.value;//搜索条件
        param.sort = data.order[0];//排序[{colunm:'第几列',dir:'排序方式'}]
        param.start = parseInt(data.start);//开始的记录序号
        param.page = (data.start / data.length)+1;//当前页码

        //需要另外传给后台的参数
        var starttime = dateToUnix($('#starttime').val());
        var endtime = dateToUnix($('#endtime').val());
        param.starttime = starttime;
        param.endtime = endtime;
        if($('.selectedInfor').eq(0).css('display')=='block'){
          var dep = $('.selectedInfor').eq(0).find('label').text();
        }else{
          var dep = '';
        }
        param.dep = dep;
        //ajax请求数据
        $.ajax({
          type: "GET",
          url: "/records/page",
          cache: false,  //禁用缓存
          data: param,  //传入组装的参数
          dataType: "json",
          success: function (result) {
            //封装返回数据
           // console.log(result.draw)
            var data = result.data;
            $.each(data,function (i) {
              data[i].in_hos = getLocalTime(data[i].in_hos*1000);
              data[i].out_hos = getLocalTime(data[i].out_hos*1000);
            })

            var returnData = {};
            returnData.draw = param.draw;//这里直接自行返回了draw计数器,应该由后台返回
            returnData.total = result.total;//返回数据全部记录条数
            returnData.recordsFiltered = result.recordsFiltered;//后台不实现过滤功能,每次查询均视作全部结果
            returnData.data = data;//返回的数据列表
            //调用DataTables提供的callback方法,代表数据已封装完成并传回DataTables进行渲染
            //此时的数据需确保正确无误,异常判断应在执行此回调前自行处理完毕
            callback(returnData);//自动填充数据到表格

            //增加跳转指定页数功能
            $("<span style='margin:0 10px 0 10px;'>到第</span><input type='text' id='changePage' class='input-text' style='width:50px;height:27px'><span style='margin-left:10px;'>页</span>").appendTo('ul.pagination');
            $('#changePage').keydown(function(e){
                if(e.keyCode==13){
                  oTable = $("#newrecords").dataTable();
                  if($(this).val() && $(this).val()>0){
                  var redirectpage = $(this).val()-1;
                 }else{
                     var redirectpage = 0;
                  }
                oTable.fnPageChange( redirectpage );
                }
           });
          },

        });
      },
      //列表表头字段,data值和后台返回的callback函数会对应找到以下data值进行填充
      columns: [
       { "data": 'num',"render":function(data,type,row,meta){
          return '<a class="num" style="color:#697ECC;" href="/pdf/index?file=/'+row.src+'&rid='+row.num+'&draw='+row.draw+'&start='+row.start+'">'+row.num+'</a>'
        }},
        {"data":'name'},
        {"data":'gender'},
        {"data":'age'},
        {"data":'code'},
        {"data":'department'},
        {"data":'doctor'},
        {"data":'in_hos'},
        {"data":'out_hos'},
        {"data":'hos_number'},
        {"data": 'pageNum' },
        {"data":'homepage'},
        {"data":'src',"render":function(data,type,row,meta){
            return '<a style="color:#697ECC;" href="/pdf/index?file=/'+row.src+'&draw='+row.draw+'&start='+row.start+'">查看病历</a>'
        }}
      ],
      fnDrawCallback:function(){
        // alert($('#changePage').attr('class'))

      }
    }).api();
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用方法: 支持JAVA和PHP两种后台。 PHP:直接将WebRoot下的文件放到php服务器上直接运行即可,记得启用sqlite3。 JAVA:修改user-manage.js,将访问后台的url由"datasource.php"改为"datasource.jsp",然后将WebRoot下的文件放到tomcat下直接运行。也可使用Eclipse直接导入此项目文件。 简要说明: 使用DataTable默认的ajax交互功能,对传给后台和从后台获取的数据都有命名格式要求,这样一来耦合度较高,不利于后期扩展,不能直接适用于需要跟多种不同前端或其他业务交互的项目。本例子主要展示了自行封装请求参数和返回数据的用法,对后台的交互没有任何格式和命名限制。 基于Bootstrap 2.3.2,相关的其他插件包括图标控件FontAwesome、等待提示控件Spinjs(修改版)、弹窗控件lhgdialog(修改版) 主要展现: 封装请求参数(查询、排序、分页,不再需要data、dataFilter和dataSrc) 封装返回数据 自定义查询参数 服务器分页 自行控制和自定义遮罩效果 生成自定义效果的单元格(在线离线) 生成复选框单元格 响应复选框选择事件 生成操作按钮单元格 响应操作栏按钮点击事件 响应行点击事件 渲染回调事件(默认选中第一行) 分页栏增加跳页功能(直接修改了dataTables.bootstrap.js和dataTables.bootstrap.css) CSS实现单元格超长文字省略号显示 CSS实现单元格连续纯字母数字强制换行显示

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值