(function($) {
    $.fn.formJSON = function() {
        var serializeObj = {};
        var array = this.serializeArray();
        var str = this.serialize();
        $(array).each(
                function() {
                    if (serializeObj[this.name]) {
                        if ($.isArray(serializeObj[this.name])) {
                            serializeObj[this.name].push(this.value);
                        } else {
                            serializeObj[this.name] = [
                                    serializeObj[this.name], this.value ];
                        }
                    } else {
                        serializeObj[this.name] = this.value;
                    }
                });
        return serializeObj;
    };
})(jQuery);
function isEmpty(str) {
    return (str == null || $.trim(str).length == 0);
}
/**
 * 调用dataTables分页查询
 *
 * @param options
 *            此参数是个对象 此对象的 table,action 属性为必须属性 query为查询条件包裹元素id,即父元素id
 */
 
function query_dataTable(options) {
    var data_table_object;
    // options参数说明 function 有complete 查询完成后会调用的事件
    // load 替换现有在加载函数 调用自己的加载函数来加载datatable数据 调用load函数会传递 这个4个参数url, queryParam,
    // callback, oSettings
    // success 在表格数据成功加载后需要调用的function 会传递json数据 即后台返回的数据包
    // table对象中 data-options 设置每个对象即一列 里面的参数包括 Class title visible width out
    // render 四个属性 Class自定义样式 title标题 visible是否显示列 width 自定义每列宽度 默认平均分配宽度
    // out 自定义此列输出内容 返回字符串 会传递2个参数 当前值 跟当前行的所有列对象数据
    // render 跟out函数用法差不多 此函数覆盖原来的输出列函数 自定义列输出 三个参数 当前行数据 当前列数据 oSettings对象
    // hidden_title 是否隐藏表头 默认显示
    // selected 是否显示选择列
    // selectType 单选或多选 默认多选
    // selectCall 选择框change时的触发事件调用函数 传递当前选中的内容json数组格式
    // 可以调selectedAll()函数获取当前选中的内容json数组
    var url = options.url ? options.url : "自定义默认url";
    var table = options.table;// 显示列表数据 table
    var query = options.query ? options.query : "#queryParam";// 查询条件包裹元素id
    var table_class = $(table).attr("class"); // 是否自定义样式
    var hidden_title = options.hidden_title ? options.hidden_title : null;// 是否隐藏表头
    var complete = function() {// 加载完成调用事件
        if (options.complete)
            options.complete();
    }
    var columns = [];
    if (isEmpty(table_class)) {
        $(table).removeClass("table table-striped table-hover table-bordered");
        $(table).addClass("table table-striped table-hover table-bordered");
    }
    var data_options = $(table).attr("data-column");// 表头的自定义列属性
    var bSort = options.sort ? options.sort : false;// 自定义表格否排序 true false
    data_options = JSON.parse(data_options);
    var selectedType = options.selectType ? options.selectType : "checkbox";// 选择类型单选或多选
    // checkbox
    // radio
    var dis = (selectedType == "radio") ? "disabled" : "";
    if (options.selected) {// 是否显示复选框默认不显示
        columns.push({
            "mDataProp" : "",
            "sTitle" : "<input title='全选/反选' type='" + selectedType + "' "
                    + dis + " name='bootstarp_data_table_checkbox'>",
            "sClass" : "left selected",
            "bVisible" : true,
            "sWidth" : "2%",
            "bSortable" : false,
            "fnRender" : function() {
                return "<input title='选择' type='" + selectedType
                        + "' name='bootstarp_data_table_checkbox'>";
            }
        });
    }
    var displayLen = data_options.length;// 获取显示列数量
    $.each(data_options, function() {
        var visible = this["visible"];
        if (visible)
            displayLen--;
    });
    $.each(data_options, function(index, td) {// 初始化列数据
        var sClass = td.Class ? td.Class : "center";// 居中
        var sTitle = td.title ? td.title : "";// 标题
        var bVisible = td["visible"] ? false : true;// 是否隐藏
        var sWidth = td.width ? td.width : (100 / displayLen) + "%";// 不设置宽度默认
        var bSortable = td.sort ? td.sort : bSort;// 自定义列是否排序 true false
        // 平均分配
        var column = {
            "mDataProp" : td.name,
            "sTitle" : sTitle,
            "sClass" : sClass,
            "bVisible" : bVisible,
            "sWidth" : sWidth,
            "bSortable" : bSortable
        };
        if (td.out) {
            column["fnRender"] = function(row, key) {// 编辑列需要执行的自定义函数输出内容
                // 此函数会接收两个参数 (第一个是此列的值
                // 第二个是当前行所有内容)
                return td.out(key, row.aData);// key 为当前列数据
                // row.aData为当前行数据
            }
        }
        if (td.render) {// 覆盖原有的编辑列自定义输出内容函数 此函数有三个参数 oSettings 对象
            // row对象 col列对象
            column["fnRender"] = td.render;
        }
        columns.push(column);
    });
    function success(json) {
        // to code
    }
    var successFunc = options.success ? options.success : success;
    // 3个参数的名字可以随便命名,但必须是3个参数,少一个都不行
    function datatable_callback(url, queryParam, callback, oSettings) {
        queryParam = $(query).formJSON();// 查询条件
        queryParam["PAGE_INFO.currentPage"] = oSettings._iDisplayStart;// 当前页
        $.ajax({
            type : 'POST',
            dataType : 'json',
            cache : false,
            url : url,// 这个就是请求地址对应sAjaxSource
            data : queryParam, // 这个是把datatable的一些基本数据传给后台,比如起始位置,每页显示的行数
            success : function(json) {
                json["sEcho"] = oSettings._sEcho | oSettings.iDraw;
                if (options.success)
                    options.success(json);
                callback(json);// 把返回的数据传给这个方法就可以了,datatable会自动绑定数据的
            },
            error:function(e){
                //alert("对不起数据加载失败!");
            }
        });
    }
    var data_table_load = options.load ? options.load : datatable_callback;
    data_table_object = $(table).dataTable({
        "bFilter" : false,// 去掉搜索框
        "bAutoWidth" : false, // 自适应宽度
        "sPaginationType" : "bootstrap",
        "bLengthChange" : false,
        "bDestroy" : true,
        "bProcessing" : false,
        "sAjaxSource" : url,
        "fnServerData" : data_table_load, // 获取数据的处理函数
        "bServerSide" : false,// 是否每次请求新数据
        "bSort" : bSort,// 是否使用排序
        "aoColumns" : columns,
        "fnInitComplete" : complete,
        "oLanguage" : {
            "sProcessing" : "数据获取中...",
            "sLengthMenu" : "_MENU_ 记录/页",
            "sZeroRecords" : "没有匹配的记录",
            "sInfo" : "显示第 _START_ 至 _END_ 条记录,共 _TOTAL_ 条",
            "sInfoEmpty" : "显示第 0 至 0 条记录,共 0条",
            "sInfoFiltered" : "(由 _MAX_ 条记录过滤)",
            "sInfoPostFix" : "",
            "oPaginate" : {
                "sFirst" : "首页",
                "sPrevious" : "上页",
                "sNext" : "下页",
                "sLast" : "末页"
            }
        }
    });
    if (options.selected) {// 显示选择框
        $('tbody', $(table))
                .on(
                        'click',
                        'td',
                        function() {
                            if ($(this)
                                    .find(
                                            ":input[name='bootstarp_data_table_checkbox']").length < 1) {
                                var box = $(this)
                                        .parent()
                                        .find(
                                                ":input[name='bootstarp_data_table_checkbox']");
                                box.prop("checked", !box.is(":checked"));
                            }
                            if (options.selectCall) {// 选择框点击时触发selectCall函数
                                var selecteds = data_table_object.selectedAll();
                                options.selectCall(selecteds);
                            }
                        });
        $('thead', $(table)).find(
                ":input[name='bootstarp_data_table_checkbox']").on(
                "click",
                function() {
                    $('tbody', $(table)).find(
                            ":input[name='bootstarp_data_table_checkbox']")
                            .prop("checked", $(this).is(":checked"));
                    if (options.selectCall) {// 选择框点击时触发selectCall函数
                        var selecteds = data_table_object.selectedAll();
                        options.selectCall(selecteds);
                    }
                });
        // 获取datatable选中行的所有数据
        data_table_object.selectedAll = function() {
            var selected = [];
            $.each(this.fnGetNodes(), function() {
                var rows = this;
                var checked = $(this).find(
                        ":input[name='bootstarp_data_table_checkbox']").is(
                        ":checked");
                if (checked)
                    selected.push(data_table_object.fnGetData(rows));
            });
            return selected;
        };
    }
    $(table).prev().hide();
    if (hidden_title) {
        $(table).find("tr:eq(0)").hide();
    }
    return data_table_object;
}

bootstrap datatable项目封装的更多相关文章

  1. bootstrap datatable项目封装支持单选多选

    自己在开发项目是根据自己的项目后台框架封装的jquery datatable插件基本上能集成到任何项目中使用,当然封装的还不够完美,给大家学习 调侃 使用介绍:query_dataTable({tab ...

  2. 利用表格分页显示数据的js组件bootstrap datatable的使用

    前面展示了datatable的简单使用,还可以通过bootstrap结合datatable来使用,这样可以进一步美化datatable插件 <!DOCTYPE html> <html ...

  3. bootstrap入门项目备份

    bootstrap入门项目备份 http://files.cnblogs.com/files/wordblog/bootstrap%E5%85%A5%E9%97%A8%E9%A1%B9%E7%9B%A ...

  4. VUE+ELEMENT-UI的后台项目封装组件--查询form的封装

    最近项目打算重构,项目的模块几乎都是以后台查询展示的传统的增删改差模式,所以卑微的我想要自己封装一下查询form,先上效果图 子组件页面: <template> <div class ...

  5. asp.net mvc bootstrap datatable 服务端分页 更新槽糕的代码【1】

    datatable 服务端分页 因项目需求变动,需处理大量数据,更改成服务端分页,自己两天的学习笔记 datatable 1.10.7 百度云下载  密码:0ea1 先上图[ jqueryui风格] ...

  6. asp.net mvc bootstrap datatable 服务端分页

    datatable 服务端分页 因项目需求变动,需处理大量数据,更改成服务端分页,自己两天的学习笔记 先上图[ jqueryui风格] 前端代码: @{ Layout = null;} <!DO ...

  7. bootstrap DataTable绑定数据带服务器分页

    <!-- DataTables -->  这两个文件在我的文件夹里面<script src="~/bower_components/datatables.net/js/jq ...

  8. 麦子学院bootstrap实战项目官网,后台,jquery.singlePageNav.min.js ,wow.min.js,animate.css使用

    1.源码笔记 我的源码+笔记(很重要):链接: https://pan.baidu.com/s/1eSxgLV0 密码: 2pi2 感谢麦子学院项目相关视频:链接: https://pan.baidu ...

  9. bootstrap datatable 数据刷新问题

    在项目中,页面初始化的时候,通过通过向后台请求数据,页面初始化完之后,datatable是有数据的,当我点击页面的搜索按钮(按照时间过滤数据),datatable的数据要能重新刷新或者重载:这一点,我 ...

随机推荐

  1. MVC在View中页面跳转

    在做人事系统的时候须要用到页面跳转,那么页面跳转究竟用什么方法好呢?依照曾经的思路,我就会这么写. <span style="font-size:18px;">wind ...

  2. RGB中的颜色的设置

    用来表示一个 RGB 颜色值. 语法 RGB(red, green, blue) RGB 函数的语法含有以下这些命名参数: 部分 描述 red 必要参数:Variant (Integer).数值范围从 ...

  3. Python的调用程序

    任务 调用系统命令ping 判断局域网内有哪些主机存活 假设你用c语言写了一个算法,需要对该算法进行测试.测试的数据集几百个.这时可以使用过GCC生成test.exe,再使用python批量调用该ex ...

  4. devres in linux driver

    写 driver 时, probe 中常常要为设备分配一些资源, 如 内存 / irq / gpio / iomap 等. 而在 probe 中失败时又要小心的释放掉这些资源. 底层驱动开发人员可能会 ...

  5. set 去重 会 破坏 原有list 的元素相对位置

    feature_reduce_l = [i if re.search('\d', i) is None else i[0:re.search('\d', i).endpos - 1] for i in ...

  6. JDBC各种数据库连接URL关键代码

    通过JDBC连接数据库时,各个数据库有着不同的URL格式,为了方便大家使用,我在以下提供了常见的7种数据库连接示例代码,请根据实际需要进行相应的更改. 1.Oracle数据库 Class.forNam ...

  7. Buildroot构建指南——根文件系统(Rootfs)【转】

    本文转载自; 版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[+]   Buildroot构建指南——根文件系统(Rootfs) Buildroot的Rootfs构建流程有一个大 ...

  8. 创建cordova项目

    PhoneGap是一套能让你使用HTML5轻松调用本地API接口和发布应用到商店的应用开发平台.官方说有低成本,低开发周期,轻量化等优点,这些咱暂时也没法证明,略过不表.但是有一条跨平台,却是很明显的 ...

  9. AutoIT: 句柄的妙用

    句柄是独一无二的,很多时候,Title,Command都可以用句柄来代替.以下写法是能够起一样的作用. $handle= WinGetHandle("autoit cn") $ct ...

  10. UI:使用 pod 引入 AFNetworking

    cocdpods的安装  参考1  参考2 参考3 注意:MVC是一种搭建项目的思想,不是设计模式. 使用第三方管理控件: 引入CocoaPods的详细步骤:(1)检测有没有引入淘宝镜像gem sou ...