很久没有写博客了,因为最近忙于一些杂七杂八的事情。不过,互联网的价值在于信息共享,因为共享,所以互联网才能飞快发展。博主建了一个技术共享qq群:164858883,因为目前人数还比较少,活跃度还不是很高,希望有和我一样想法的,有志于技术共享的技术宅,富有逗比精神的程序猿能一起加入,一起探讨和分享,一起创造更大的进步。当然,妹纸程序猿更受欢迎。^_^

  好了,废话不多说了。今天要讲的分页器是web网页的分页器,就是下面这种效果,相信大家都用的多了。

      

  现在要做的就是如何用javascript实现这个分页器。

  实现原理:在html中列表实现这个效果。设置ul,在ul中动态添加li,给li添加属性pagenum,这个属性值等于此刻li代表的页号。在每次用户点击页号后,刷新数据,重新生成一个分页器。原理就是这样,直接上代码。

  

 /**
* Created by Steven on 2015/04/11/
*
*/ function pager(
/*int*/ index,
/*int*/ size,
/*String*/ ulClassName
) { $('.' + ulClassName).empty();
var createLi = function (/*String*/content,
/*int*/ pageNum,
/*String*/ className) {
var li = $('<li></li>');
li.html(content);
li.addClass(className);
if (pageNum > 0) { //Only add 'pagenum' attribute to the clickable li tag
li.attr('pagenum', pageNum);
}
$('.' + ulClassName).append(li); }; if (index < 1) {
return;
} else if (index == 1) {
createLi('首页', 0, 'pager-first-li-disable');
createLi('上一页', 0, 'pager-previous-li-disable');
} else {
createLi('首页', 1, 'pager-first-li');
createLi('上一页', index - 1, 'pager-previous-li');
}
if (size <= 8) {
for (var i = 1; i <= size; i++) {
if (i != index) {
createLi(i, i, 'pager-normal-li');
} else {
createLi(i, 0, 'pager-index-li');
}
}
} else {
if (index - 3 <= 1) {//while index is in first the three items
for (var i = 1; i <= index + 5; i++) {
if (i != index) {
createLi(i, i, 'pager-normal-li');
} else {
createLi(i, 0, 'pager-index-li');
}
}
createLi('···', 0, 'pager-space-li');
createLi(size, size, 'pager-normal-li');
} else if (index + 5 >= size) {//while index is in the last five items
createLi('···', 0, 'pager-space-li');
for (var i = index - 5; i <= size; i++) {
if (i != index) {
createLi(i, i, 'pager-normal-li');
} else {
createLi(i, 0, 'pager-index-li');
}
} } else {
createLi('···', 0, 'pager-space-li');
for (var i = index - 3; i <= index + 5; i++) {
if (i != index) {
createLi(i, i, 'pager-normal-li');
} else {
createLi(i, 0, 'pager-index-li');
}
}
createLi('···', 0, 'pager-space-li');
createLi(size, size, 'pager-normal-li');
}
} if (index == size) {
createLi('下一页', 0, 'pager-next-li-disable');
createLi('尾页', 0, 'pager-last-li-disable');
} else if ((index < size)) {
createLi('下一页', index + 1, 'pager-next-li');
createLi('尾页', size, 'pager-last-li');
}
}

  这里我需要声明一下,之前我还写过一个分页器,不过,把请求的url的参数也写了进去。其实这样是完全没必要,也是不好的,这样就增加了分页器的复杂性,并且不好操作。而直接这样写,在哪使用起来都很方便,因为确定url,url的参数还要考虑进去。而我直接加入li属性,可以通过jQuery很方便的找到所需的页号。也很方便的进行其他处理。在生成li的函数createLi也是经过优化才这样写。这样一个函数可以生成所有所需的li元素。用起来是相当方便的,同时有效缩短了代码长度,删去了重复代码。剩下的工作便是在css文件实现所需要的效果样式了,由于css简单,就不上代码了。有问题可以在群里问我,也可以发邮件给我zhuttymore@126.com.

  我这里再补充一下,以为分页器里边的li是动态添加的,获取点击事件时,不能用$('.pager li').click();来获取,下面提供一下方法:

  $(document).on('click',".page-box li",function(){
    if(this.hasAttribute('pagenum')){
     alert($(this).attr('pagenum'));
    }
});

  这样才能正常获取点击事件,并且获取pagenum页号属性。

   修改了一个bug, 就是当前页等于最后一页时,createLi()第二个参数应该为0. 当初偷懒,写好最后一句时,直接copy上去,忘了改参数。现在是完整的可以使用了。

  特别声明:原创作品,转载请注明出处http://zhutty.cnblogs.com。

[原创作品] javascript 实现的web分页器原理的更多相关文章

  1. [原创作品]Javascript内存管理机制

    如果你也喜欢分享,欢迎加入我们:QQ group:164858883 内存策略:堆内存和栈内存栈内存:在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配.当在一段代码块中定义一个 ...

  2. [原创作品] web项目构建(一)

    今天开始,将推出web项目构建教程,与<javascript精髓整理篇>一并更新.敬请关注. 这篇作为这一系列开头,主要讲述web项目的构建技术大全.在众多人看来,web前端开发无非就是写 ...

  3. [原创作品]web网页中的锚点

    因为近来在从事web前端开发的工作,所以写的文章也都是关于web这一块.以后将分享算法和web高级编程的内容,很多公司的web前端不够重视,以为是很low-level,给的待遇也很一般,其实,这都是很 ...

  4. 原创:Javascript DI!Angular依赖注入的实现原理

    DI是Angular的特色功能,而在Angular 2.0的计划中,DI将成为一个独立的模块,参见 https://github.com/angular/di.js 这意味着它也有机会被用于nodej ...

  5. [原创作品] RequireJs入门进阶教程

    最近我发现RSS采集数据是个很好玩的东西,就是可以直接把别人的数据放在自己的网站上.如果网友们在其他地方发现这篇文章,还是来博客园看吧(http://zhutty.cnblogs.com).这样代码比 ...

  6. 我的第一部原创《JavaScript 全栈开发》正式上市了!

    在经过了漫长的创作.审校过程之后,<JavaScript 全栈开发>终于迎来了在各大平台上正式出版的日子,以下是这本书的基本信息: 出品方: 异步社区:https://www.epubit ...

  7. 【原创】14. MYSQL++之SSQLS(原理解析)

    从之前所介绍的SSQLS的介绍中我们可以感受到,SSQLS的精髓应该在sql_create_#这个宏,他所创建出来的这个结构体将会是突破的关键,所以我将会从以下顺序入手. 1. sql_create_ ...

  8. C/S B/S 及WEB工作原理

     一.C/S B/S区别 (http://wenku.baidu.com/link?url=e8bxaqz_lYCXws6TlDRJEq1qsLumNTBhr3Es6eA1ZuhHhq9FZGbVgo ...

  9. [原创作品]手把手教你怎么写jQuery插件

    这次随笔,向大家介绍如何编写jQuery插件.啰嗦一下,很希望各位IT界的‘攻城狮’们能和大家一起分享,一起成长.点击左边我头像下边的“加入qq群”,一起分享,一起交流,当然,可以一起吹水.哈,不废话 ...

随机推荐

  1. JSP小实例--计算器

    package cn.com.caculate; import java.math.BigDecimal; public class caculate { private String firstNu ...

  2. Android 中文 API (40) —— RatingBar

    Android 中文 API (40) —— RatingBar 前言 本章内容是 android.widget.RatingBar,译为"评分条",版本为Android 2.2 ...

  3. CentOS6.x升级MySQL版本号5.1到5.6

    有一些虚拟机.云主机提供商仍然使用的是老版本号的安装套件. 预装的应用软件版本号非常低. 比方 techbrood.com 使用的云server,当中MySQL预装版本号为老版本号5.1.x. 而最新 ...

  4. StringBuffer和StringBuilder使用方法比較

    StringBuffer是字符串缓冲区,是一个容器. 特点: 1,长度是可变化的. 2,能够字节操作多个数据类型. 3,终于会通过toString方法变成字符串. C create U update ...

  5. JNI(5)The Invocation API

    调用API允许软件提供商加载Java VM 到任意的本地应用中.供应商可以提供支持Java的应用程序而无需链接Java VM的代码. 概述 下面代码展示了通过调用API如何使用函数.这个例子中C++代 ...

  6. Python之基础(二)

    1.内建函数enumerate friends = ['john', 'pat', 'gary', 'michael'] for i, name in enumerate(friends): prin ...

  7. 读取xml文件信息

    static void Main(string[] args) { XmlTextReader reader = new XmlTextReader(@"D:\zy\visual studi ...

  8. c#.net防止按F5刷新页面重复提交的方法

    在网上购物的过程中,提交完一个页面后,如果此时按f5刷新,则会弹出一个提示:如果继续,则会重新发送提交我们刚才提交的内容,这个问题应该规避掉,不然总是重复提交付款,那可不是件好事. 在c#.net中的 ...

  9. c - 输出 101 至 200之间的素数.

    #include <stdio.h> #include <math.h> //判断 101-200 之间有多少个素数,并输出所有素数. int main(void) { , e ...

  10. linux mint 下mysql中文支持问题

    一.mysql默认不支持中文,它的server和db默认是latin1编码.所以我们要将其改变为utf-8编码,因为utf-8包含了地球上大部分语言的二进制编码 1.关闭mysql服务 sudo /e ...