工作中遇到这一需求,时间仓促赶着演示,只用了1个多小时随随便便做的,满足自定义以及同页面多块分页同时进行,多的不说,直接上demo,工作忙,没时间细化,希望哪位路过优化细化后共享下,最后附上使用说明
1、自己刚刚开始整合的小类库
View Code
String.prototype.trim = function () { return this.replace(/(^\s*)|(\s*$)/g, ""); } String.prototype.ltrim = function () { return this.replace(/(^\s*)/g, ""); } String.prototype.rtrim = function () { return this.replace(/(\s*$)/g, ""); } String.prototype.isNumber = function () { return this != "" && !isNaN(this); } String.prototype.toFix = function (fix) { /// <summary> /// 去掉多余小数并且不四舍五入 /// </summary> /// <param name="fix" type="Number"> /// 要保留的小数位数 /// </param> /// <returns type="Number" /> if (this.isNumber() && fix.isNumber()) { var array = this.split('.'); if (array.length > 1 && fix.split('.').length == 1) { if (fix == 0) { return Number(array[0]); } return Number(array[0] + "." + array[1].substring(0, fix)); } } return this; } Number.prototype.toFix = function (fix) { return this.toString().toFix(fix.toString()); }
2、主要js代码
View Code
function myAjaxOperation(dom, currentIndex, pageSize, pageCount) { this.dom = dom; this.currentIndex = currentIndex; this.pageSize = pageSize; this.pageCount = pageCount; } myAjaxOperation.prototype.paging = function () { /// <summary> /// 通过ajax获取分页数据并分页 /// </summary> /// <param name="dom" type="jQuery"> /// 要填充数据的dom,以及在dom下方生成分页条 /// </param> /// <param name="currentIndex" type="Int"> /// 获取第几页 /// </param> /// <param name="pageSize" type="Int"> /// 每页获取多少条数据 /// </param> /// <param name="pageCount" type="Int"> /// 分页条显示多少页 /// </param> /// <returns type="html" /> if (this.dom == "undefined" || $(this.dom).attr("class") != "ajaxRequest") { return; } var dom = this.dom; var currentIndex = 1; var pageSize = 10; var pageCount = 10; if (this.currentIndex != "undefined" && this.currentIndex.toString().isNumber()) { currentIndex = Number(this.currentIndex); } if (this.pageSize != "undefined" && this.pageSize.toString().isNumber()) { pageSize = Number(this.pageSize); } if (this.pageCount != "undefined" && this.pageCount.toString().isNumber()) { pageCount = Number(this.pageCount); } var total; //总共多少条数据 var totalpage; //总共多少页 var preNO; //分页条当前页之前显示多少页 var nextNO; //分页条当前页之后显示多少页 if (pageCount % 2 == 0) { preNO = pageCount / 2; nextNO = (pageCount / 2) - 1; } else { preNO = (pageCount / 2).toFix(0); nextNO = (pageCount / 2).toFix(0); } var url = $(dom).attr("destination"); $.get(url, { pageSize: pageSize, pageIndex: currentIndex }, function (msg) { var resultDom = $(msg); $(dom).html(resultDom); total = Number($(resultDom).find("table").attr("total")); if ((total / pageSize) > (total / pageSize).toFix(0)) { totalpage = ((total / pageSize) + 1).toFix(0); } else { totalpage = total / pageSize; } var pagingBar = $('<div class="paging"><ul></ul></div>'); if (currentIndex != 1) { $(pagingBar).children("ul").append($('<li index="1"><a href="#">首页</a></li>')); $(pagingBar).children("ul").append($('<li index="' + (currentIndex - 1) + '"><a href="#">上一页</a></li>')); } for (var i = 1; i <= pageCount && currentIndex - preNO + 1 <= totalpage && i <= totalpage; i++) { var index = i; if (currentIndex > preNO && (totalpage - currentIndex) >= nextNO) { index += (currentIndex - preNO); } else if (totalpage < pageCount) { } else { if (totalpage - currentIndex < nextNO) { index = totalpage - pageCount + index; } } $(pagingBar).children("ul").append($('<li index="' + index + '" ' + (index == currentIndex ? 'class="pagingli"' : '') + '><a href="#">' + index + '</a></li>')); } if (currentIndex != totalpage) { $(pagingBar).children("ul").append($('<li index="' + (currentIndex + 1) + '"><a href="#">下一页</a></li><li index="' + totalpage + '"><a href="#">末页</a></li>')); } $(pagingBar).children("ul").append($('<li>共 ' + total + '条,' + totalpage + '页</li>')); $(pagingBar).children().find("li").bind('click', function () { $(this).addClass("liloading"); getDataList($(dom), $(this).attr("index"), pageSize, pageCount); }); $(dom).next(".paging").remove(); $(dom).after(pagingBar); }); } function getDataList(dom, currentIndex, pageSize, pageCount) { var myAjax = new myAjaxOperation(); myAjax.dom = $(dom); myAjax.currentIndex = currentIndex; myAjax.pageSize = pageSize; myAjax.pageCount = pageCount; myAjax.paging(); }
3、获取的数据的格式,注意table有个自定义属性 总数total用来显示总共多少条数据
View Code
<div> <table cellpadding="0" cellspacing="0" width="100%" total="@ViewBag.total"> @if (ViewBag.IsComplate == "0") { @*未完成*@ <thead> <tr> <td class="leftborder"> 流程名称 </td> <td> 流程交易号 </td> <td> 操作名称 </td> <td> 操作人 </td> <td> 操作人部门 </td> <td> 创建时间 </td> <td class="rightborder"> 已过时间 </td> </tr> </thead> <tbody> @{foreach (var item in ViewData["AllOpreation"] as List<AllOpreationModel>) { <tr> <td>@item.ProcessName </td> <td> <a href="javascript:void(0)" onclick="OpenCurrentProcess('@item.ProcessTransactionsNumber')"> [@item.ProcessTransactionsNumber]</a> @*<a href="javascript:void(0)" onclick="currentPro(1)">@item.ProcessTransactionsNumber</a>*@ </td> <td> @item.OperationName </td> <td> <a href="javascript:void(0)">@item.Operator</a> </td> <td>@item.OperatorSector </td> <td>@item.CreationTime </td> <td>@item.Overtime </td> </tr> } } </tbody> } else { @*已完成*@ <thead> <tr> <td class="leftborder"> 流程名称 </td> <td> 流程交易号 </td> <td> 操作名称 </td> <td> 操作交易号 </td> <td> 操作结果 </td> <td> 操作人 </td> <td> 操作人部门 </td> <td> 待办创建时间 </td> <td> 完成时间 </td> <td class="rightborder"> 历时 </td> </tr> </thead> <tbody> @{foreach (var item in ViewData["AllOpreation"] as List<AllOpreationModel>) { <tr> <td>@item.ProcessName </td> <td> <a href="javascript:void(0)" onclick="OpenCurrentProcess('@item.ProcessTransactionsNumber')"> [@item.ProcessTransactionsNumber]</a> @*<a href="javascript:void(0)" onclick="currentPro(1)">@item.ProcessTransactionsNumber</a>*@ </td> <td>@item.OperationName </td> <td> @Html.ActionLink("[" + item.OperatingTransactionNumber + "]", "FormView", "../uWorkflow/Task", new { code = item.OperatingTransactionNumber }, new { target = "_blank" }) </td> <td>@item.OperatingResult </td> <td> <a href="javascript:void(0)">@item.Operator</a> </td> <td>@item.OperatorSector </td> <td>@item.CreationTime </td> <td>@item.CompletionTime </td> <td>@item.Overtime </td> </tr> } } </tbody> } </table> </div>
4、如何使用,@*之间的内容是MVC的注释,分页条自动生成,不用写的*@
html:
View Code
@*@Html.Action("_WaitingOperationPart", "Opreation")*@ <div class="ajaxRequest" destination="/uProcess/Opreation/_WaitingOperationPart" pageSize="10" pageCount="5"> @* This data list get by ajax. Please set class 'ajaxRequest' and set a custom attribute 'destination'. pageSize :每页获取多少条数据 pageCount : 分页条显示多少页 *@ </div> @*<div class="paging"> <ul> <li><a href="#">首页</a></li> <li><a href="#">上一页</a></li> <li class="pagingli"><a href="#">1</a></li> pagingli 当前页样式 <li class="liloading"><a href="#">2</a></li> liloading 点击后显示加载图标 <li><a href="#">3</a></li> <li><a href="#">4</a></li> <li><a href="#">5</a></li> <li><a href="#">下一页</a></li> <li><a href="#">末页</a></li> </ul> </div>*@
js:pageSize和pageCount也可以不初始化,默认都是10
$(".ajaxRequest").each(function (index) { if (window["console"]) console.log(index); var myAjax = new myAjaxOperation(); myAjax.dom = $(this); myAjax.currentIndex = 1; myAjax.pageSize = $(this).attr("pageSize").trim(); myAjax.pageCount = $(this).attr("pageCount").trim(); myAjax.paging(); });
5、截图赏析 样式自己调
6、不善写作,如果还是不懂就给我留言,我会在收到留言的第一时间回复你