很久没有写博客了,因为最近忙于一些杂七杂八的事情。不过,互联网的价值在于信息共享,因为共享,所以互联网才能飞快发展。博主建了一个技术共享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. HTML, CSS学习笔记(完整版)

    第一章 div布局 前几课内容 .htm是早期的后缀.由于那时仅仅能支持长度为3的后缀.因此html与htm是一样的. shtml是server先处理然后再交给浏览器处理 #HTML小知识#之#XHT ...

  2. C++经典题目:有n个人围成一圈,顺序排号,然后数数进行淘汰的解法和一些思考

    问题描述: 有n个人围成一圈,顺序排号.从第一个人开始报数(1~3报数),凡报到3的人退出圈子,问最后留下的人原来排在第几号. 分析: 首先由用户输入人数n,然后对这n个人进行编号[因为如果不编号的话 ...

  3. php中socket的使用 方法简介

    一.开启socket phpinfo();查看是否开启了socket扩展,否则在php.ini中开启. 二.服务器端代码的写法 <?php error_reporting(E_ALL); set ...

  4. 小学生之Java中的异常

    1.异常try{ //可能出现异常的代码}catch(Exception ex){ }finally{ //释放资源}2.异常的高级应用开闭原则:对修改关闭,对新增开放3.什么是异常?解析:异常是代码 ...

  5. 第一篇博客关于Log4net的配置记录

    说明:本程序演示如何利用log4net记录程序日志信息.log4net是一个功能著名的开源日志记录组件.利用log4net可以方便地将日志信息记录到文件.控制台.Windows事件日志和数据库(包括M ...

  6. Node.js中的exports与module.exports的区分

    1. module应该是require方法中,上下文中的对象 2. exports对象应该是上下文中引用module.exports的新对象 3. exports.a = xxx 会将修改更新到mod ...

  7. 前端bug记录---不定时更新

    在项目的开发中难免遇到各种各样的bug,我觉得还是有必要记录一下的,方便日后查询. safari window resize  为满足日常轮播需求,做一个符合当前业务的轮播插件,其中需要考虑windo ...

  8. VS2012发布网站IIS配置

    首先要配置好下面步骤 然后 把图上勾选的都勾选 最后一步 那IIS就配置好了,怎么添加发布呢打开IIS管理器 然后带点击网站添加网站 ,在这之前首先要在磁盘里新建一个文件夹,把项目复制过去,网站随便命 ...

  9. 关于解决方案和web文件夹放在同一目录路径错误的问题

    今天公司要做个b2b商城,下了个源码,目的是在这个基础上改,可是源码没有解决方案,于是建立了个解决方案,然后添加网站,发现解决方案和web目录位于不同目录(解决方案总是自动生成一个目录),可是我从网上 ...

  10. Linux下彻底删除oracle步骤【转】

    (1)关闭oracle服务和后台进程  <1>查看安装的主目录和环境变量: echo $ORACLE_HOME env | grep ORA <2>查看实例名 sqlplus ...