先来看看效果:

对于前端分页,关键是思路,和分页算法。本想多说两句,可又觉得没什么可说的,看代码吧:

如何使用?

            $("#pging").zPagination({
'navEvent':function(){
console.log('取数据Ajax');
}
});

JS代码

//分页Pagination
; (function ($, window) {
var defaults = {
rowCount: 400, //总数据行数
navPage: 10, //每次显示多少页导航
pageSize: 10, //每页多少条数据
currentPage: 20, //当前是第几页
showRowsCount: true, //是否显示总数据数
showGoto: false, //是否有跳转功能
navUrl: '', //点击页后所跳转到的URL,用于非Ajax()方式:/Home/Index.aspx?pageIndex=
ajaxUrl: '', //点击页后从哪个URL取数据,用于Ajax()方式:/Home/Index
isAjaxData: true, //是从Ajax取数据还是非Ajax取数据
divClass: 'z_paging', //外围DIV的Class,其下有.z_paging a , .z_paging a:hover , .z_paging>.z_paging_current
navEvent: ''//点击导航页后所要执行的事件function(){...},通常和isAjaxData==true联用。
};
$.fn.zPagination = function (options) {
$this = $(this);
var ops = $.extend({}, defaults, options);
var _pageCount = 0;
var _startNav = 0;
var _endNav = 0; //初始化参数
function initParameter() {
_pageCount = (ops.rowCount % ops.pageSize == 0) ? ops.rowCount / ops.pageSize : parseInt(ops.rowCount / ops.pageSize) + 1;
if (ops.currentPage <= parseInt(ops.navPage / 2)) {
_startNav = 1;
} else {
_startNav = ops.currentPage - parseInt(ops.navPage / 2); //(30-(10/2)==25)
} _endNav = _startNav + ops.navPage;
if (_endNav > _pageCount) {
_endNav = _pageCount;
_startNav = _endNav - ops.navPage;
}
if (_startNav < 1) {
_startNav = 1;
} //生成DOM元素
if (ops.isAjaxData == true) {
generateAjaxDom();
} else {
generateDom();
}
}; //网址方式加载数据 isAjaxData==false 时执行
function generateDom() {
$this.html('').addClass(ops.divClass);
$('<a href=' + ops.navUrl + '1></a>').html(1).appendTo($this);
_startNav++;
if (_startNav != 2) {
$('<span></span>').html('...').appendTo($this);
}
while (_startNav < _endNav) {
$('<a href=' + ops.navUrl + _startNav + '></a>').html(_startNav).appendTo($this);
_startNav++;
}
_startNav--; if (_endNav < _pageCount) {
$('<span></span>').html('...').appendTo($this);
}
if (_startNav < _endNav && _endNav <= _pageCount) {
$('<a href=' + ops.navUrl + _endNav + '></a>').html(_pageCount).appendTo($this);
}
findCurrentNum();
} //通过Ajax方式加载数据 isAjaxData==true 时执行
function generateAjaxDom() {
$this.html('').addClass(ops.divClass);
$('<a href="javascript:void(0);"></a>').html(1).appendTo($this);
_startNav++;
if (_startNav != 2) {
$('<span></span>').html('...').appendTo($this);
}
while (_startNav < _endNav) {
$('<a href="javascript:void(0);"></a>').html(_startNav).appendTo($this);
_startNav++;
}
_startNav--; if (_endNav < _pageCount) {
$('<span></span>').html('...').appendTo($this);
}
if (_startNav < _endNav && _endNav <= _pageCount) {
$('<a href="javascript:void(0);"></a>').html(_pageCount).appendTo($this);
} //给每个<a />添加事件
function initAjaxData() {
$this.find('a').bind('click', function () {
try {
ops.currentPage = parseInt($(this).html());
if (typeof (ops.navEvent) == 'function') {
ops.navEvent();
initParameter(); //重新生成页数导航条,放在这里,放在这里,是为了避免因参数没传对,而出现看见导航页变了,而数据没变的情况
}
} catch (e) { }
});
}
initAjaxData();
findCurrentNum();
} //找出当前页
function findCurrentNum() {
$this.find('a').each(function () {
if (parseInt($(this).html()) == ops.currentPage) {
$(this).addClass('z_paging_current');
}
});
appendEle();
} //附加元素 是否显示总数据数
function appendEle() {
if (typeof (ops.showRowsCount) == 'boolean') {
$('<span class="z_rows_count"></span>').html('总数:' + ops.rowCount).appendTo($this);
}
} initParameter(); //获取当前是第几页 调用方式:this.currentPage
this.currentPage = function () {
return ops.currentPage();
}; return this;
};
})(jQuery, window);

CSS

/*zPagination Begin*/
.z_paging
{
}
.z_paging a, .z_paging span
{
float: left;
display: inline-block;
vertical-align: text-bottom;
text-align: center;
line-height: 34px;
background-color: #fff;
}
.z_paging a
{
cursor: pointer;
border-radius: 3px;
border: 1px solid #e5e5e5;
padding: 0 12px;
margin: 0 2px;
text-decoration: none;
color: #734ba9;
}
.z_paging a:hover
{
background-color: #6699ff;
color: #fff;
}
.z_paging > .z_paging_current
{
background-color: #e5e5e5;
}
.z_paging > .z_rows_count
{
border-radius: 3px;
border: 1px solid #e5e5e5;
padding: 0 12px;
margin: 0 2px;
text-decoration: none;
color: #734ba9;
}
/*zPagination End*/

jQuery插件实例六:jQuery 前端分页的更多相关文章

  1. jQuery插件实例五:手风琴效果[动画效果可配置版]

    昨天写了个jQuery插件实例四:手风琴效果[无动画版]那个是没有动画效果的,且可配置性不高,本篇为有动画效果.对于一些数据做了动态的计算,以实现自适应. 欢迎大家入群相互交流,学习,新群初建,欢迎各 ...

  2. 【jQuery插件】用jQuery Masonry快速构建一个pinterest网站布局(转)

    [jQuery插件]用jQuery Masonry快速构建一个pinterest网站布局 时间:2011年03月21日作者:愚人码头查看次数:29,744 views评论次数:25条评论 前段时间领导 ...

  3. 转 jquery插件--241个jquery插件—jquery插件大全

    241个jquery插件—jquery插件大全 jquery插件jqueryautocompleteajaxjavascriptcoldfusion jQuery由美国人John Resig创建,至今 ...

  4. 精美jQuery插件及源码 前端开发福利

    jQuery是一个非常不错的javascript框架,很多前端开发者喜欢的原因不仅是因为jQuery使用起来方便,更重要的是因为它的插件很多,我们可以将这些插件应用到自己的项目中去.下面这些精美的jQ ...

  5. 转:精美jQuery插件及源码 前端开发福利

    原文来自于:http://www.html5tricks.com/pretty-jquery-plugin.html jQuery是一个非常不错的javascript框架,很多前端开发者喜欢的原因不仅 ...

  6. 一个很简单的jQuery插件实例教程(菜鸟级)

    很多公司的前端设计开发人员都是女孩子,而这些女孩子很多JavaScript技能都不是很好.而前端开发过程中,JavaScript技能又是必不可少的.所以,如果前端小MM正在为某个JavaScript效 ...

  7. jQuery插件实例一:年华时代插件Alert对话框

    在工作中使用jQuery插件相信对于程序员来说非常普遍,在网络上也有很多优秀的插件可供大家使用,功能非常强大.在之前用过的一些插件中,有些太过追求功能的强大和可配置性,造成使用的复杂度上升.个人认为与 ...

  8. 网站开发常用jQuery插件总结(六)关键词说明插件cluetip

    我们开发的网站,总有它一定的用途.如企业站用来宣传企业或展示产品,技术站用来分享自己的思路和经验.既然网站有了它的用途,那么就拥有了它本身的关键词(关键词说明网站的主要内容).例如企业站的关键词大部分 ...

  9. JQUERY插件学习之jQuery UI

    jQuery UI:http://jqueryui.com/ jQuery UI介绍: jQuery UI 是以 jQuery 为基础的开源 JavaScript 网页用户界面代码库.包含底层用户交互 ...

随机推荐

  1. 【IT笔试面试题整理】给定二叉树先序中序,建立二叉树的递归算法

    [试题描述]:  给定二叉树先序中序,建立二叉树的递归算法 其先序序列的第一个元素为根节点,接下来即为其左子树先序遍历序列,紧跟着是右子树先序遍历序列,固根节点已可从先序序列中分离.在中序序列中找到 ...

  2. eclipse安装quick text search插件,全文搜索

    主要有两种方法 1.InstaSearch 同样可以做到workspace下的全文搜索 可以使用eclipse marktplace中搜索instaSearch,与普通软件安装类似 安装成功后的界面如 ...

  3. Spark2.1.0——深入浅出度量系统

    Spark2.1.0--深入浅出度量系统 对于一个系统而言,首先考虑要满足一些业务场景,并实现功能.随着系统功能越来越多,代码量级越来越高,系统的可维护性.可测试性.性能都会成为新的挑战,这时监控功能 ...

  4. HDU 3613 Best Reward(拓展KMP算法求解)

    题目链接: https://cn.vjudge.net/problem/HDU-3613 After an uphill battle, General Li won a great victory. ...

  5. 1657 Distance on Chessboard(简单计算题)

    描述 国际象棋的棋盘是黑白相间的8 * 8的方格,棋子放在格子中间.如下图所示:王.后.车.象的走子规则如下: 王:横.直.斜都可以走,但每步限走一格. 后:横.直.斜都可以走,每步格数不受限制. 车 ...

  6. 【SpringBoot系列5】SpringBoot整合RabbitMQ

    前言: 因为项目需要用到RabbitMQ,前几天就看了看RabbitMQ的知识,记录下SpringBoot整合RabbitMQ的过程. 给出两个网址: RabbitMQ官方教程:http://www. ...

  7. 算法时间复杂度、空间复杂度(大O表示法)

    什么是算法? 计算机是人的大脑的延伸,它的存在主要是为了帮助我们解决问题. 而算法在计算机领域中就是为了解决问题而指定的一系列简单的指令集合.不同的算法需要不同的资源,例如:执行时间或消耗内存. 如果 ...

  8. Mac破解Sublime Text 3 3176

    ## Sublime Text 3 Serial key build is 3176 > * Added these lines into /etc/hosts 127.0.0.1 www.su ...

  9. 通过AOP自定义注解实现日志管理

    前言: 通过自定义注解和AOP结合的方式,实现日志的记录功能 大致流程:项目运行->用户操作调用业务处理类->通过自定义的注解(我理解为一个切点)->进入到AOP切面类(在这里可以获 ...

  10. 数组无法使用 forEach() 方法 - 分号的重要性

    问题描述: 函数的结构如上图所示,在调用该函数的时候,浏览器报错: 分析原因: 在 js 的语法中,如果语句独占一行,通常可以省略句末的分号 但实际上 js 解析代码的时候,只有在句末缺少分号就无法正 ...