半成品源代码:
(基本的都可以用,事件响应没有做,因为我没有啥需要,所以就没有写)
(function($) { $.fn.datagrid = function(param) { var table = new Table(param, $(this)); table.init(); return table; } })(jQuery); /* var field={ text:‘‘, field:‘‘, hidden:false, algin:‘center‘, width:‘100px‘ }; */ function Table(param, obj) { this.params = { pagination : [5, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 ], title : ‘数据列表‘, action : ‘‘, colunms : [], pageField : ‘page‘, rowField : ‘row‘, row:10, page:1, total:0, formParam:{},//表单参数 onLoadComplete : function(data) {}, onClickRow : function(index,row) {}, onDblClickRow : function(index,row) {}, onNextPage : function(target) { }, onPrevPage : function(target) { }, onSelectPage : function(target) { }, onChangePage : function(target) { } }; this.getCurrentPage=function(){ return this.params.page; } this.getTotalPage=function(total){ var page=0; if(total%this.params.row==0){ page=total/this.params.row; }else{ page=parseInt(total/this.params.row)+1; } return page; } // 处理参数 for ( var item in param) { this.params[item] = param[item]; } this.init = function() { var target=this; var html = ‘‘; html += ‘<div class="widget-title"><span class="icon"><i class="icon-th"></i></span><h5>‘ + this.params.title + ‘</h5>‘; html += ‘</div>‘; html += ‘<div class="content">‘; html += ‘<table class="table">‘; html += ‘<thead>‘; html += ‘<tr>‘; // 追加表头 if (this.params.colunms && this.params.colunms.length > 0) { for ( var i = 0; i < this.params.colunms.length; i++) { var align=‘ style="‘; if(this.params.colunms[i].align){ align+=‘text-align:‘+this.params.colunms[i].align+‘;‘; } if(this.params.colunms[i].width){ align+=‘width:‘+this.params.colunms[i].width+‘;‘; } align+=‘ "‘; html += ‘<th ‘+align+‘ field="‘ + this.params.colunms[i].field + ‘">‘ + this.params.colunms[i].text + ‘</th>‘; } } html += ‘</tr>‘; html += ‘</thead>‘; html += ‘<tbody class="tb-body">‘; // 内容 html += ‘</tbody>‘; html += ‘</table>‘; html += ‘‘; html += ‘<div style="padding: 0px 10px;">‘; html += ‘<div style="float: left;">‘; html += ‘<span>条数:</span>‘; html += ‘<select class="select" style="height: 25px;line-height: 25px;width: 60px;">‘; // 追加页码 if (this.params.pagination && this.params.pagination.length > 0) { for ( var i = 0; i < this.params.pagination.length; i++) { if(this.params.pagination[i]==this.params.row){ html += ‘<option selected="selected" value=‘ + this.params.pagination[i] + ‘>‘ + this.params.pagination[i] + ‘</option>‘; }else{ html += ‘<option value=‘ + this.params.pagination[i] + ‘>‘ + this.params.pagination[i] + ‘</option>‘; } } } html += ‘</select>‘; html += ‘</div>‘; html += ‘<div class="pagination" style="float: right;">‘; html += ‘<div style="float: left;">‘; html += ‘<input type="text" name="page" style="height: 12px;line-height:12px;width: 30px;text-align: right;margin-top: 5px;" class="current" value="1">/<label><span class="total">0</span></label>页‘; html +=‘<label style="margin:0px 10px;">总数:<span class="dataTotal">0</span></label>‘; html += ‘</div>‘; html += ‘<ul>‘; html += ‘<li><a href="javascript:;" class="start-page">首页</a></li>‘; html += ‘<li><a href="javascript:;" class="prev-page">上一页</a></li>‘; html += ‘<li><a href="javascript:;" class="next-page">下一页</a></li>‘; html += ‘<li><a href="javascript:;" class="end-page">尾页</a></li>‘; html += ‘</ul>‘; html += ‘</div>‘; html += ‘<div class="clear"></div>‘; html += ‘</div>‘; html += ‘</div>‘; $(obj).html(html); html = ‘‘; load(this); // 注册事件 $(".select").change(function() { target.onSelectPage($(this)); target.params.row=parseInt($(this).val()); load(target); }); //首页和末页 $(".start-page").click(function(){ target.params.page=1; load(target); }); $(".end-page").click(function(){ target.params.page=target.getTotalPage(target.params.total); load(target); }); //上一页和下一页 $(".prev-page").click(function(){ target.params.page-=1; if(target.params.page<1){ target.params.page=1; } load(target); }); $(".next-page").click(function(){ target.params.page+=1; var totalPage=target.getTotalPage(target.params.total); if(target.params.page>totalPage){ target.params.page=totalPage; } load(target); }); $(".current").keyup(function(event){ if(event.keyCode==13){ var page=parseInt($(this).val()); if(page){ if(page<=0){ page=1; } var totalPage=target.getTotalPage(target.params.total); if(page>totalPage){ page=totalPage; $(this).val(page); } target.params.page=page; load(target); }else{ alert(‘请输入有效的页码!‘); } } }); } function load(target) { var params=target.params; // 加载初始数据 var html=‘‘; var formParam=target.params.formParam; formParam.row=params.row; formParam.page=params.page; $.post(params.action, formParam, function(d) { var json = $.parseJSON(d); var rows = json.rows; params.total=json.total; for ( var i = 0; i < rows.length; i++) { html += ‘<tr row="‘+i+‘">‘; // 字段 for ( var item in params.colunms) { var key = params.colunms[item].field; var align=params.colunms[item].align; var formater = params.colunms[item].formater; var value = rows[i][key]; if (formater) { // 调用 value = formater(value, i, rows[i]); } var alignStr=‘‘; if(align){ alignStr=‘ style="text-align:‘+align+‘"‘; } //判断值 if(typeof value=="undefined"){ value=""; } html += ‘<td ‘+alignStr+‘>‘ + value + ‘</td>‘; } html += ‘</tr>‘; } $(".tb-body").html(html); params.onLoadComplete(json); //改变页码 var total=target.getTotalPage(parseInt(json.total)); $(".dataTotal").text(json.total); $(".total").text(total); $(".current").val(target.getCurrentPage()); if(!json.total||!json||json.total==0){ $(".tb-body").html("<tr><td colspan=‘"+params.colunms.length+"‘ style=‘text-align:center;‘>没有找到数据!</td></tr>"); } target.onLoadComplete(json); $(".tb-body tr").click(function(){ var row=$(this).attr("row"); target.params.onClickRow(row,json.rows[row]); }); $(".tb-body tr").dblclick(function(){ var row=$(this).attr("row"); target.params.onClickRow(row,json.rows[row]); }); }); //上一页和下一页 html=‘‘; } this.reload=function(){ load(this); } this.loadData=function(params){ this.params.page=1; this.params.formParam=params; load(this); } // 加载数据 this.onLoadComplete = function(data) { } this.onClickRow = function(target) { } this.onNextPage = function(target) { } this.onPrevPage = function(target) { } this.onSelectPage = function(target) { } this.onChangePage = function(target) { } }
使用实例:
var state={"0":"<span style=‘color: #28B779‘>显示</span>","1":"<span style=‘color:red;‘>隐藏</span>"}; var datagrid={}; $(function(){ datagrid=$(".table-box").datagrid({ title:‘分类列表‘, action:‘${basePath}/manage/adManageAction.do?method=allData‘, colunms:[{ text:‘编号‘, field:‘id‘, align:‘left‘ },{ text:‘广告类型‘, field:‘adPositionName‘ },{ text:‘标题‘, field:‘title‘ },{ text:‘状态‘, field:‘status‘, formater:function(value,index,row){ return state[value]; } },{ text:‘排序号‘, field:‘orderNum‘ },{ text:‘广告图片‘, field:‘advImage‘, formater:function(value,index,row){ return "<img src=‘${basePath}/image?url=/"+value+"&w=200&h=50&s=false‘ style=‘width:200px;‘/>"; } },{ text:‘广告连接‘, field:‘link‘, formater:function(value,index,row){ return "<a href=‘"+value+"‘>打开链接</a>"; } },{ text:‘开始时间‘, field:‘beginTime‘, formater:function(value,index,row){ return value.split(" ")[0]; } },{ text:‘结束时间‘, field:‘endTime‘, formater:function(value,index,row){ return value.split(" ")[0]; } },{ text:‘添加时间‘, field:‘createTime‘ },{ text:‘添加人‘, field:‘nickname‘ },{ text:‘操作‘, field:‘action‘, formater:function(value,index,row){ return "<a href=‘javascript:;‘ onclick=‘edit("+row.id+")‘>编辑</a> "+"<a href=‘javascript:;‘ onclick=‘del("+row.id+")‘>删除</a> "; } }], onDblClickRow:function(index,row){ alert(row.link); } }); $(".content input[type=‘text‘]").keyup(function(event){ if(event.keyCode==13){ search(); } }); }); function search(){ var params=$(".content").getParams(); datagrid.loadData(params); } function edit(id){ window.location.href="${basePath}/manage/adManageAction.do?method=edit&id="+id; } function del(id){ if(confirm("确认删除吗?")){ $.post("${basePath}/manage/adManageAction.do?method=delete",{id:id},function(r){ var json=$.parseJSON(r); if(json.success){ datagrid.reload(); }else{ alert(json.msg); } }); } }