一、js:pagination.js

/*--说明
分页div id为:changpage
*/
var eachPageDataNum = 10;//每页显示记录数
var nowPage = 1;//当前页码
var pagecount = 0;//总页数
var recordcount = 0;//总记录数
var nowPageStart = 1;//当前起始页码
var pagination = 3; //页码个数
function PagingLoad(datanum, pagenum, totalRecord, loadData) {
recordcount = totalRecord;
eachPageDataNum = datanum;
pagination = pagenum;
pagecount = Math.ceil(recordcount / eachPageDataNum);
loadPage();
addEvent();
loadData(1);
};

//分页布局样式
function loadPage() {
//首页
var vHome = '<a href="javascript:void(0)" >首页</a> ';
//主体--页码
var vPage = "<div id='pageN' style='display:inline'>";
for (var i = 1; i <= pagination; i++) {
if (i == nowPage) vPage += '<a href="javascript:void(0)" class="cur">' + i + '</a> '
else vPage += '<a href="javascript:void(0)">' + i + '</a> '
}
vPage += "</div>";
var vElsePre = "<div id='pElsePre' style='display:inline'><a href='javascript:void(0)' type='pre'>...</a></div>";
var vElseNext = "<div id='pElseNext' style='display:inline'><a href='javascript:void(0)' type='next'>...</a></div>";
var vPEnd = '<a href="javascript:void(0)">' + pagecount + '</a>';
//尾页
var vEnd = '<a href="javascript:void(0)">尾页</a> '
//下一页
vNext = '<a href="javascript:void(0)">下一页</a> '
//上一页
vPre = '<a href="javascript:void(0)">上一页</a> '
//跳转
vGo = '<span class="p_tz">到<input type="text" value="' + nowPage + '" id="goPageNo">页<a href="javascript:void(0)">跳转</a></span>';
//总页数 总记录数
vTotal = '<span class="p_page">共' + pagecount + "页, 共" + recordcount + "条记录";
var result = vHome + vPre + vElsePre + vPage + vElseNext + vNext + vEnd + vGo + vTotal;
document.getElementById("changpage").innerHTML = result;
OtherDisplay();
$("#goPageNo").keyup(function () {
//如果输入非数字,则替换为'',如果输入数字,则在每4位之后添加一个空格分隔
this.value = this.value.replace(/[^\d]/g, '').replace(/(\d{4})(?=\d)/g, "$1 ");
})
}

//分页按钮事件
function addEvent() {
var n = 0;
$('#changpage a').bind("click", function () {
switch ($(this).text()) {
case "首页": var b = (nowPageStart != 1); nowPage = nowPageStart = 1; ReLoad(b); $('#pageN a').eq(0).addClass("cur"); break;
case "尾页": var b = (parseInt(nowPageStart + pagination) < pagecount); nowPage = pagecount; nowPageStart = pagecount - pagination + 1; ReLoad(b); $('#pageN a').eq(pagination - 1).addClass("cur"); break;
case "上一页": if (nowPage != 1) nowPage = parseInt(nowPage) - 1; else break; var b = (nowPage < nowPageStart); if (b) { nowPageStart = nowPageStart - pagination; ReLoad(b); $('#pageN a').eq(pagination - 1).addClass("cur"); } else { ReLoad(b); $('#pageN a').eq(nowPage - nowPageStart).addClass("cur"); } break;
case "下一页": if (nowPage != pagecount) nowPage = parseInt(nowPage) + 1; else break; var b = (nowPage > parseInt(nowPageStart + pagination - 1)); if (b) { nowPageStart = nowPageStart + pagination; ReLoad(b); $('#pageN a').eq(0).addClass("cur"); } else { ReLoad(b); $('#pageN a').eq(nowPage - nowPageStart).addClass("cur"); } break;
case "...":
if ($(this).attr('type') == "pre") {
nowPage = nowPageStart = parseInt(nowPageStart - pagination);
if (nowPage < 0) nowPage = nowPageStart = 1;
}
else {
nowPage = nowPageStart = parseInt(nowPageStart + pagination);
if (nowPage > pagecount) nowPage = nowPageStart = pagecount;
}
//重置分页
PageNumLoad();
PageNumEvent();
loadData(nowPage);
break;
case "跳转":
gotoPage();
break;
default: nowPage = $(this).text();
loadData(nowPage);
$('.cur').removeClass('cur');
$(this).addClass('cur');
break;
}
});
}

//跳转事件
function gotoPage() {
var nPage = $("#goPageNo").val();
if ((nPage != null && nPage < 1) || (pagecount != null && nPage > pagecount) || eachPageDataNum < 0 || nowPageStart < 0) return;
else {
nowPage = nPage;
var b = (nowPage >= parseInt(nowPageStart + pagination) || nowPage <= nowPageStart);
if (b) {
nowPageStart = Math.ceil(nowPage / pagination) * pagination - pagination + 1;
}
ReLoad(b);
$('#pageN a').eq((nowPage - 1) % pagination).addClass("cur");
}
}

//设置 “...” 是否显示
function OtherDisplay() {
if (nowPageStart == 1) {
$("#pElsePre").hide();
}
else {
$("#pElsePre").show();
}
if (parseInt(nowPageStart + pagination) >= pagecount) {
$("#pElseNext").hide();
}
else {
$("#pElseNext").show();
}
}

//页面页码布局重载
function PageNumLoad() {
var vPage = "<div id='pageN' style='display:inline'>";
for (var i = nowPageStart; i < parseInt(pagination + nowPageStart) ; i++) {
if (i == nowPage) vPage += '<a href="javascript:void(0)" class="cur">' + i + '</a> '
else vPage += '<a href="javascript:void(0)">' + i + '</a> '
}
vPage += "</div>";
$("#pageN").replaceWith(vPage);
OtherDisplay();
}

//页码注册click事件
function PageNumEvent() {
$('#pageN a').bind("click", function () {
$('.cur').removeClass('cur');
$(this).addClass('cur');
loadData($(this).text());
});
}

//重载页码
function ReLoad(reload) {
if (reload) {
PageNumLoad();
PageNumEvent();
}
loadData(nowPage);
$('.cur').removeClass('cur');
}

二、实例,调用上面的js

Index.cshtml

<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script src="~/Scripts/Pagination.js"></script>@*分页js*@
<link href="~/Content/Pagination.css" rel="stylesheet" />
<style>
td {
border: solid #add9c0;
border-width: 0px 1px 1px 0px;
padding-right: 20px;
}

table {
border: solid #add9c0;
border-width: 1px 0px 0px 1px;
}
</style>
<script>
var recordcount = 0;//总记录数
$(function () {
recordcount = '@ViewBag.Count';
PagingLoad(6, 5, recordcount, loadData)//loadData是获取数据函数
});

//获取数据
function loadData(nPage) {
nowPage = nPage;
$.getJSON("/Home/GetData",
{ r: Math.random(), pg: nPage, ps: eachPageDataNum }, function (data) {
$("#data").empty();
var table = "<table>";

$.each(data.Data, function (i, item) {
table += "<tr><td>" + item.id + "</td><td>" + item.name + "</td><td>" + item.age + "</td>></tr>";
});
table += "</table>";
$("#data").html(table);
});
}
</script>
<body>
<div id="data"></div>
<div class="pages" id="changpage"></div>
</body>

controller:

namespace Pagination.Controllers
{
public class Person{
public string id;
public String name;
public int age;
public Person(){}
public Person(string id,string name,int age)
{
this.id=id;
this.name=name;
this.age=age;
}
}
public class HomeController : Controller
{
List<Person> list;
//ArrayList list = new ArrayList();
private void CreateData()
{
list = new List<Person>();
for(int i=1;i<=50;i++)
{
list.Add(new Person(DateTime.Now.Ticks.ToString() + i, "Person"+i, i));
}
}
public ActionResult Index()
{
ViewBag.Count = 50;
return PartialView();
}

public string GetData()
{
CreateData();
int pageNum = int.Parse(Request["pg"]);
int pageSize = int.Parse(Request["ps"]);
string str = "";
for (int i = (pageNum - 1) * pageSize; i < pageNum * pageSize;i++ )
{
Person p =list[i];
str += "{";
str += "\"id\": \"" + p.id+ "\",";
str += "\"name\": \"" + p.name + "\",";
str += "\"age\": \"" + p.age + "\",";

str = str.Substring(0, str.Length - 1);
str += "},";
}
if (str.Length != 0)
{
str = str.Substring(0, str.Length - 1);
}
return "{\"Data\":[" + str + "]}";
}

}
}

这里没有贴出css,可以根据自己的喜好定制样式

js 带省略号的分页源码及应用实例的更多相关文章

  1. JS魔法堂:jsDeferred源码剖析

    一.前言 最近在研究Promises/A+规范及实现,而Promise/A+规范的制定则很大程度地参考了由日本geek cho45发起的jsDeferred项目(<JavaScript框架设计& ...

  2. 你还不知道Vue的生命周期吗?带你从Vue源码了解Vue2.x的生命周期(初始化阶段)

    作者:小土豆biubiubiu 博客园:https://www.cnblogs.com/HouJiao/ 掘金:https://juejin.im/user/58c61b4361ff4b005d9e8 ...

  3. 如何优雅的阅读 GitHub 上开源 js 框架和库的源码

    如何优雅的阅读 GitHub 上开源 js 框架和库的源码 step 先总后分,即先了解一下啊框架的大体架构,又一个全局的认识,在选择某些和感兴趣的部分,仔细阅读,各个击破: 带着问题阅读,用到了什么 ...

  4. 原生JS研究:学习jquery源码,收集整理常用JS函数

    原生JS研究:学习jquery源码,收集整理常用JS函数: 1. JS获取原生class(getElementsByClass) 转自:http://blog.csdn.net/kongjiea/ar ...

  5. 手把手带你阅读Mybatis源码(三)缓存篇

    前言 大家好,这一篇文章是MyBatis系列的最后一篇文章,前面两篇文章:手把手带你阅读Mybatis源码(一)构造篇 和 手把手带你阅读Mybatis源码(二)执行篇,主要说明了MyBatis是如何 ...

  6. 我的书籍《深入解析Java编译器:源码剖析与实例详解》就要出版了

    一个十足的技术迷,2013年毕业,做过ERP.游戏.计算广告,在大公司呆过,但终究不满足仅对技术的应用,在2018年末离开了公司,全职写了一本书<深入解析Java编译器:源码剖析与实例详解> ...

  7. [源码分析] 从实例和源码入手看 Flink 之广播 Broadcast

    [源码分析] 从实例和源码入手看 Flink 之广播 Broadcast 0x00 摘要 本文将通过源码分析和实例讲解,带领大家熟悉Flink的广播变量机制. 0x01 业务需求 1. 场景需求 对黑 ...

  8. JS魔法堂:剖析源码理解Promises/A规范

    一.前言 Promises/A是由CommonJS组织制定的异步模式编程规范,有不少库已根据该规范及后来经改进的Promises/A+规范提供了实现 如Q, Bluebird, when, rsvp. ...

  9. 手把手带你阅读Mybatis源码(二)执行篇

    前言 上一篇文章提到了MyBatis是如何构建配置类的,也说了MyBatis在运行过程中主要分为两个阶段,第一是构建,第二就是执行,所以这篇文章会带大家来了解一下MyBatis是如何从构建完毕,到执行 ...

随机推荐

  1. [Python] Python 之 __new__() 方法与实例化

    __new__() 是在新式类中新出现的方法,它作用在构造方法建造实例之前,可以这么理解,在 Python 中存在于类里面的构造方法 __init__() 负责将类的实例化,而在 __init__() ...

  2. Oracle 11g ORA-00845: MEMORY_TARGET not supported on this system

    启动Oracle 11gR2后报错:ORA-00845 rac1:/home/oracle> sqlplus / as sysdba; SQL*Plus: Release 11.2.0.3.0 ...

  3. linux mysql 相关操作命令

    1.linux下启动mysql的命令:mysqladmin start/ect/init.d/mysql start (前面为mysql的安装路径) 2.linux下重启mysql的命令:mysqla ...

  4. vim设置语法高亮

    在vim安装目录中的_vimrc修改,加上以下的代码. set nu! colorscheme desert      syntax enable      syntax on

  5. SpringMvc 相关,bean map转换,百度天气,base64.js,jsBase64.java;

    1. Map<String, Object>与JavaBean[POJO, Model]转换; //model public class model{ private int id; pr ...

  6. cocos基础教程(3)cocos3.x版本目录结构介绍

    简介 cocos2d-x-3.x版本进行了很多优化,比如:将TTF字体用Atlas缓存,节点重排序官方声称提升了10倍速度,查找.移除节点方面也提高了10%,拆分渲染层到独立的线程运行: 另外,coc ...

  7. Ubuntu 16.04 下安装Firefox的Flash插件

    在ubuntu系统环境下面打开优酷视频,发现无法播放视频.Adobe Flash Player 是一款轻量级浏览器插件,具有丰富的 Internet 应用运行时间,提供持续的迷人用户体验.绝妙的音频/ ...

  8. retain copy(浅复制) mutablecopy (深复制)

    http://blog.csdn.net/xdrt81y/article/details/24331103   口诀: 1浅3深   NSArray copy (浅) 返回NSArray NSArra ...

  9. JAVA-- M选N的组合算法

      M选N的组合算法 只要每个数字出现一次就可以   举例 :也就是说123与321和213属于重复 只算一组  此算法已经排除了重复数据  应用--彩票的注数算法 本程序的思路是开一个数组b,其长度 ...

  10. HDOJ 1022 模拟栈

    Train Problem I Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...