datatables 多条件搜索

时间:2021-02-14 05:38:10

最近开发项目用到了jquery datatable 这个插件,感觉还是很好用的,今天写了一个表格的完整功能,贴上来,以供参考,html,和后台部分的内容就不贴了,只贴js部分

/*
         * 调用搜索,搜索参数在fnServerParams中定义
         */
        $("#submitSearch").click( function () {
        	oTable.fnFilter();
		} );
        
        /*
         * 初始化表格参数
         */
        var oTable = $('#messageList').dataTable( {
        	"bProcessing" : false, //DataTables载入数据时,是否显示‘进度’提示
            "bServerSide" : true, //是否启动服务器端数据导入
            //"aLengthMenu" : [10, 20, 50], //更改显示记录数选项
           	"iDisplayLength" : 10, //默认显示的记录数
            "bPaginate" : true, //是否显示(应用)分页器
            "bInfo" : true, //是否显示页脚信息,DataTables插件左下角显示记录数
            "bSort" : true, //是否启动各个字段的排序功能
            "sDom": "t<'row-fluid'<'span6'i><'span6'p>>",//定义表格的显示方式
            "sPaginationType": "bootstrap",
            "aaSorting" : [[0, "desc"]], //默认的排序方式,第0列,降序排列
            "bFilter" : true, //是否启动过滤、搜索功能
                "aoColumns" : [{
                    "mData" : "id",	//列标识,和服务器返回数据中的属性名称对应
                    "sTitle" : "",//列标题
                    "sDefaultContent" : "", //此列默认值为"",以防数据中没有此值,DataTables加载数据的时候报错
                    "bVisible" : false //此列不显示
                    //"sClass" : "hidden"//定义列的class参数,隐藏列也可以通过这种方式设置
                }, {
                    "mData" : "fromUser",
                    "sTitle" : "发送人",
                    "sWidth":"10%",//定义列宽度,以百分比表示
                    "sDefaultContent" : "",
                }, {
                    "mData" : "toUser",
                    "sTitle" : "接收人",
                    "sDefaultContent" : "",
                }, {
                    "mData" : "messaeg_content",
                    "sTitle" : "消息内容",
                    "sDefaultContent" : "",
                    "bSortable":false	//此列不需要排序
                },  {
                    "mData" : "",
                    "sTitle" : "操作",
                    "sDefaultContent" : "",
                }],
                "oLanguage": { //国际化配置
	                "sProcessing" : "正在获取数据,请稍后...",  
	                "sLengthMenu" : "显示 _MENU_ 条",  
	                "sZeroRecords" : "没有您要搜索的内容",  
	                "sInfo" : "从 _START_ 到  _END_ 条记录 总显示记录数为 _TOTAL_ 条",  
	                "sInfoEmpty" : "记录数为0",  
	                "sInfoFiltered" : "(共显示 _MAX_ 条数据)",  
	                "sInfoPostFix" : "",  
	                "oPaginate": {  
	                    "sFirst" : "第一页",  
	                    "sPrevious" : "上一页",  
	                    "sNext" : "下一页",  
	                    "sLast" : "最后一页"  
	                }
                },
                /*
                * 修改状态值 
                */
                "fnRowCallback" : function(nRow, aData, iDisplayIndex) {
                    if (aData.response_type == 'video')
                        $('td:eq(1)', nRow).html('视频回复');
                   
                    
                    return nRow;
                },
                /*
                 * 向服务器传递的参数
                 */
                "fnServerParams": function ( aoData ) {
                    aoData.push( 
                    		{ "name": "keyword", "value": $("#search-keyword").val() }, 
                    		{ "name": "responseType", "value": $("#search-responseType").val() }
                    		);
                  },
                 //请求url
                "sAjaxSource" : basePath+"getCustomResponsePageMessage/"+$("#secret").val(),
                    //服务器端,数据回调处理
                "fnServerData" : function(sSource, aDataSet, fnCallback) {
                	$.ajax({
                        "dataType" : 'json',
                        "type" : "post",
                        "url" : sSource,
                        "data" : aDataSet,
                        "success" : function(resp){
                        	fnCallback(resp);
                        }
                    });
                }
        });


以下是服务器返回的参数

{
    "iTotalRecords": 10,//本次加载记录数量
    "iTotalDisplayRecords": 57,//总记录数量
    "aaData": [
        {
            "id": "1",
            "fromUser": "tom",
            "toUser": "jack",
            "content": "hello"
        },
        {

            "id": "2",
            "fromUser": "jack",
            "toUser": "tom",
            "content": "how are you"

 }, ... ]}

 

需要注意的是,datatable的fnFilter有自带的搜索实现,但是它传递到后台的参数识别起来比较麻烦,所以修改了搜索的实现通过fnServerParams向后台传递搜索参数。