这节介绍如何自定义jquery插件,实现分页效果,话不多说,先看看实现的效果:

分页插件

实现的代码如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
    <meta charset="utf-8">
    <title>page test</title>
	<style>
		html,body,#pages,items{
			font-size:11px;
			font-family:"宋体","Times New Roman";
		}
		.page_item{
			background:#C9DCD7;
			width:155px;
			text-align:left;
			padding:10px;
			border-bottom:1px solid #3CF;
		}
		.page_item:hover{
			background:#A9C9FA;
			cursor:pointer;
		}
		#page_ctrl{
			padding-top:5px;
		}
		.page_ctrl{
			width:40px;
			text-align:center;
			background:#A9C9FA;
			float:left;
			margin:2px;
			padding-top:5px;
			padding-bottom:5px;
		}
		.page_ctrl:hover{
			background:#C9DCD7;
			cursor:pointer;
		}
	</style>
    <script type="text/javascript" src="../../zTree/js/jquery-1.4.4.min.js"></script>
    <script type="text/javascript">
		var showItemInfo;
		(function($){
 			$.fn.itemPage = function(options){
				var defaults = {};
				var options = $.extend(defaults, options);

				var data=options.data,//数据
					currpage=options.currpage,//当前页
					pagesize=options.pagesize;//每页显示的数据条目器

				var total=data.total;

				var items=$("<div id='items'></div>"),
					pagectrl=$("<div id='page_ctrl'></div>");

				var first=$("<div id=\"first\" class=\"page_ctrl\" onClick=\"showPage('first')\">首 页</div>"),
					prev=$("<div id=\"prev\" class=\"page_ctrl\" onClick=\"showPage('prev')\">前一页</div>"),
					next=$("<div id=\"next\" class=\"page_ctrl\" onClick=\"showPage('next')\">后一页</div>"),
					last=$("<div id=\"last\" class=\"page_ctrl\" onClick=\"showPage('last')\">末 页</div>");

				var start=getStartindex(),
					end=getEndindex();

				for(var i=start;i<end;i++){
					var itemi=$("<div class='page_item' onClick='showItemInfo("+i+")'>"+data.items[i].text+"</div>");
					items.append(itemi);
				}

				pagectrl.append(first),
				pagectrl.append(prev),
				pagectrl.append(next)
				pagectrl.append(last);

				var container = $(this);
				container.append(items),
				container.append(pagectrl);

				function getStartindex(){
					return (currpage-1)*pagesize;
				}
				function getEndindex(){
					var endIndex=0;
					if(data.total%pagesize!=0 && currpage==getLastPage()){
						endIndex = data.total;
					}
					else {
						endIndex = currpage*pagesize;
					}
					return endIndex;
				}
				showItemInfo = function(i){
					console.log(i);
				};
			}
		})(jQuery);
	</script>

    <script type="text/javascript">
		var PAGE_DATA={
			"total":10,
			"items":[
				{"id":1,"text":"数据1"},
				{"id":2,"text":"数据2"},
				{"id":3,"text":"数据3"},
				{"id":4,"text":"数据4"},
				{"id":5,"text":"数据5"},
				{"id":6,"text":"数据6"},
				{"id":7,"text":"数据7"},
				{"id":8,"text":"数据8"},
				{"id":9,"text":"数据9"},
				{"id":10,"text":"数据10"}
			]
		};
		var currpage=1;
		var pagesize=4;

		$(document).ready(function (){
			loadPages(currpage);
		});

		function showPage(page){
			console.log(page);
			switch(page){
				case "prev":{//前一页
					if(currpage>1){
						currpage=currpage-1;
					}
					else{
						alert("没有上一页了!");
					}
					break;
				}
				case "next":{//后一页
					if(currpage!=getLastPage()){
						currpage=currpage+1;
					}
					else{
						alert("没有下一页了!");
					}
					break;
				}
				case "last":{//最后一页
					currpage=getLastPage();
					break;
				}
				default:{
					currpage=1;//第一页
					break;
				}
			}
			loadPages(currpage);
		};

		function loadPages(page){
			$('#pages').html("");
			$('#pages').itemPage({
				data:PAGE_DATA,
				currpage:page,
				pagesize:pagesize
			});
		};

		function getLastPage(){
			var total=PAGE_DATA.total;
			if(total%pagesize==0){
				return total/pagesize;
			}
			else{
				return parseInt(total/pagesize)+1;
			}
		}
	</script>
</head>
<body>
	<div id="pages">
    </div>
</body>
</html>

下面说说实现思路。实现分页效果,数据的加载可以分为两种情况:一次性获取数据和动态获取数据。一次性获取数据就是将所要查询的数据一次性查询出来,在前台去做分页处理;动态获取数据是根据当前页面和每页显示的条目数去动态获取数据。对于第一种,可在数据量比较小的情况下使用,可以减去每次去请求数据库和写分页sql语句的麻烦;对于第二种,适用于数据量比较大的时候,当数据量特别大的时候,一次性查询数据不论是前端还是后端,无疑都会减缓程序的执行效率与时间。


第二种情况的实现比第一种的实现简单,所以本文就不做说明,本文为第一种。

首先,获取数据。在程序中,我模拟定义了一个数据,JSON格式的,包括总条数和各对象。

其次,根据currpage和pagesize加载所要显示的条目。这里面,获取起始数和结束数是关键。起始数比较简单,为(currpage-1)*pagesize;终止数稍微麻烦一点,因为有一个判断data.total%pagesize是否为零和当前页是不是最后一页,当data.total%pagesize!=0并且满足当前页为最后一页的条件时,终止数为data.total,否组终止数为currpage*pagesize。

再次,页面控制的实现。页面控制的关键是currpage。第一页,currpage=1即可;最后一页得判断total%pagesize是否为零,是值为total/pagesize,不是值为otal/pagesize取整+1;上一页,如果当前页大于零的情况下为当前页减1,否则,没有上一页;下一页,如果当前页小于最后一页的情况下,当前页加1,否则,没有最后一页。

最后,加载显示。

jquery自定义插件实现分页效果的更多相关文章

  1. jquery自定义插件来实现分页的效果

    本节将介绍如何定义自己的jquery插入,实现分页效果,话不多说,.看看达到的效果: 分页插件 实现的代码例如以下: <!DOCTYPE HTML PUBLIC "-//W3C//DT ...

  2. 深入学习jQuery自定义插件

    原文地址:jQuery自定义插件学习 1.定义插件的方法 对象级别的插件扩展,即为jQuery类的实例增加方法, 调用:$(选择器).函数名(参数);      $(‘#id’).myPlugin(o ...

  3. 你的专属定制——JQuery自定义插件

        前  言 絮叨絮叨 jQuery是一个快速.简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaScript框架).jQuery设计的宗 ...

  4. jQuery自定义插件--banner图滚动

    前言 jQuery是一个功能强大的库,提供了开发JavaScript项目所需的所有核心函数.很多时候我们使用jQuery的原因就是因为其使用插件的功能,然而,有时候我们还是需要使用自定义代码来扩展这些 ...

  5. fullpage的使用以及less, Sass的属性和JQuery自定义插件的声明和使用

    使用fullpage的步骤   1 导入JQuery.js fullpage,js fullpage.css 2 组建网页布局,最外层id="fullpage" 单页class=& ...

  6. jquery自定义插件——以 选项卡插件为例

    一直打算尝试自定义插件,终于付诸实践了,现在把内容发表出来,与大家共勉. 我是根据自己正在用的插件,模仿其源码,实现的自定义插件,完成之后,在网上看相关资料,对自定义插件部分,有了更明确的认识. jq ...

  7. jQuery自定义插件

    jQuery自定义插件 jQuery自定义插件按照功能分类,可以分为三类, 1>封装对象方法的插件,(也就是基于某个DOM元素的jQuery对象,局部的) 2>封装全局函数的插件,   ( ...

  8. JQuery自定义插件详解之Banner图滚动插件

      前  言 JRedu JQuery是什么相信已经不需要详细介绍了.作为时下最火的JS库之一,JQuery将其"Write Less,Do More!"的口号发挥的极致.而帮助J ...

  9. 代码:jquery自定义插件 demo

    jquery自定义插件 demo 2016-1-13 只是一个简易的示例 <script type="text/javascript" src="http://cd ...

随机推荐

  1. http的请求流程

    # !/usr/bin/env python # coding:utf-8 import socket def handle_request(client): buf = client.recv(10 ...

  2. Python(正则 re模块)

    1. 匹配一个字符 表达式 说明 等价表达式 \d 数字 [0-9] \w 字母.数字.下划线 [a-zA-Z0-9_] . 除换行外任意字符   \s 空格 [\t\n\r\f\v] \D 除数字 ...

  3. LVS基本介绍

    一.LVS概念 LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器.这是一个由章文嵩博士发起的一个开源项目,它的官方网站是http://www.linuxvirtual ...

  4. cmd命令 启动 和关闭sql服务

    (1)在操作系统的任务栏中单击“开始”菜单,选择“运行”命令,在下拉列表框中输入“cmd”命令,单击“确定”按钮. (2)输入如下命令,即可通过SQL Server命令行启动.停止或暂停的服务. SQ ...

  5. 【Head First Servlets and JSP】笔记2:MVC迷你教程

    1.采用MVC,不仅要求业务逻辑和表示分离.实际上,业务逻辑甚至根本不知道表示的存在.MVC的关键是,业务逻辑要与表示分离,而要求在中间放上别的东西,这样业务逻辑本身就可以作为一个可以重用的Java类 ...

  6. JMeter接口测试和压力测试

    JMeter接口测试和压力测试 JMeter可以做接口测试和压力测试.其中接口测试的简单操作包括做http脚本(发get/post请求.加cookie.加header.加权限认证.上传文件).做web ...

  7. 如何评价一个pipeline的好坏

    生物信息NGS相关软件众多. 常用的比对软件:bwa,bowtie: 去pcr重复的软件\:samtools,picard: calling variant:samtools/bcftools,gat ...

  8. 实验三 敏捷开发与XP实践 实验报告 20162305李昱兴

    实验三 敏捷开发与XP实践 实验报告 20162305 一.什么是敏捷开发与XP 敏捷开发(Agile Development)是一种以人为核心.迭代.循序渐进的开发方法.敏捷开发以用户的需求进化为核 ...

  9. spring与memcached整合[转]

    1, 开始肯定是下载需要的文件了,这里就下载附件里的文件就好,我也是在网上down的,放这好找.然后我们安装一下Memcache服务器,找到解压的memcached-1.2.1-win32,启动cmd ...

  10. EF Code-First 学习之旅 级联删除

    级联删除是当删除主记录的时候会自动删除依赖的记录或者设置外键属性为null public class Student { public Student() { } public int Student ...