基于jQuery的实现简单的分页控件


Posted in Javascript onOctober 10, 2010

1:效果图
基于jQuery的实现简单的分页控件
2:素材
基于jQuery的实现简单的分页控件
3:编码
3.1思考
需要做什么?
1:分页控件需要向后台发送请求,发送的参数包括当前页,每页显示数量,查询条件;并且获取数据加载到当前页面;
2:进行修改删除操作的时候能记住当前页;
3:查询后翻页的时候可以可以记住当前查询的条件

3.2实现
HTML

<!--存储数据的容器--> 
<div class="tableData"> 
</div> 
<!--分页控件显示--> 
<div class="pageBar"></div>

jQuery
为了我们的控件可以随意使用,我们将其写成插件的形式,首先搭个框架,我们将插件命名为simplePage
(function($){ 
$.fn.simplePage=function(o){ 
var options={ 
//配置参数 
}; 
return //sth 
} 
})(jQuery)

默认有哪些参数呢?
由于需要发送当前页,每页显示数量,所以需要 currentPage,pageSize 两个基本参数;
由于需要查询表格内容,所以需要一个放置查询条件的表单 form;
由于需要修改删除后记住当前页,所以需要一个标志指示当前进行的是何操作type;
为了使我们的程序更具有灵活性,加上获取数据后需要加载到的container,还有就是分页控件加载的pager,
具体如下
var options={ 
pager: '.pager',//表格控件的容器 
container: '.tableData',//放置表格数据的容器 
form: '#form',//放置查询条件的表单 
pageForm: '#pageForm',//放置隐藏与的Div 
url: '',//发送请求的地址 
currentPage: 1, 
pageSize: 2 
type: null,//可选:action, 
pageShow:7 
}

为了便于维护,我们声明一个独立的对象来进行获取数据,绑定事件的操作,我们将这个函数命名为$.page
$.page = { 
// 
setPage: function(o){ 
}, 
//获取当前页 
getCurrentPage: function(o){ 
}, 
//获取每页显示数量 
getPageSize: function(o){ 
}, 
//生成发送所需要的json数据 
genData: function(o){ 
}, 
//发送数据 
loadData: function(o){ 
} 
}

实现以上所声明的函数,当分页第一次加载的时候,我们需要从服务器获取总页数来生成分页控件,所以首先实现loadData函数
loadData: function(o){ 
var that = this; 
var data = that.genData(o); 
$.ajax({ 
url: o.url, 
data: data, 
type: 'post', 
dataType: 'html', 
cache: false, 
success: function(result){ 
var res = $(result).find('tbody').html(); 
var totalPage = $(result).find('#totalPage').val(); 
var currentPage = $(result).find('#currentPage').val(); 
o.currentPage=currentPage; 
o.pager.empty(); 
$.line.setLine(totalPage,o); //调用生成分页控件的函数 
}, 
error: function(){ 
alert("error"); 
} 
}) 
}

下面我们实现上面生成分页控件的函数$.line.setLine
$.line={ 
setLine:function(totalPage,o){ 
for(var i=0;i<totalPage;i++){ 
var a=$('<a/>').html('<span>'+(i+1)+'</span>').addClass('pageA').bind('click',function(){ 
var s=$(this); 
s.siblings().removeClass('pageActive'); 
s.addClass('pageActive'); 
o.currentPage=s.text(); 
$.page.loadData(o); 
}); 
if(o.currentPage==i+1){ 
a.addClass('pageActive'); 
} 
o.pager.append(a); 
} 
var limit=this.getLimit(o,totalPage); 
var aPage=o.pager.find('a.pageA').not('a.previous,a.nextAll,a.record'); 
aPage.hide(); 
aPage.slice(limit.start,limit.end).show(); 
var prev=$('<a/>').html('<span>上一页</span>').addClass('pageA previous').unbind('click').bind('click',function(){ 
var pageActive=o.pager.find('a.pageActive'); 
var s=$(this); 
if(pageActive.prev().text()=='上一页'){ 
alert('已经是第一页!'); 
return false; 
} 
pageActive.removeClass('pageActive'); 
pageActive.prev().addClass('pageActive'); 
o.currentPage=pageActive.prev().text(); 
$.page.loadData(o); 
}); 
var next=$('<a/>').html('<span>下一页</span>').addClass('pageA nextAll').unbind('click').bind('click',function(){ 
var pageActive=o.pager.find('a.pageActive'); 
var s=$(this); 
if(pageActive.next().text()=='下一页'){ 
alert('已经是最后一页!'); 
return false; 
} 
pageActive.removeClass('pageActive'); 
pageActive.next().addClass('pageActive'); 
o.currentPage=pageActive.next().text(); 
$.page.loadData(o); 
}); 
var pageActiveText=o.pager.find('a.pageActive').text(); 
var record=$('<a/>').html('<span>'+pageActiveText+'/'+totalPage+'</span>').addClass('pageA record'); 
o.pager.prepend(prev).prepend(record).append(next); 
} 
}

在上面的代码中我们给当前的页面加上了pageActive类,所以现在我们可以实现$.page的getCurrentPage函数,非常简单
getcurrentPage: function(o){ 
var p = o.pager.find("a.pageActive").text(); 
return p; 
}

接着我们实现生成json数据的genData函数,json格式为{key:value,key:value}
genData: function(o){ 
var sdata = $.extend({}, { "currentPage": o.currentPage, 
"pageSize": o.pageSize}, $.jsonObj(o.pageForm)); 
return sdata; 
},

上面的$.jsonObj为自定义的函数,为了生成我们需要的json格式以便发送查询的数据,只支持input,select
$.jsonObj = function(form){ 
//判断是否有序列化的东东 
if (!$(form).html() || $(form).html() == null || $.trim($(form).html()) == "") { 
return null; 
} 
var formEl = $(form).find('input[type="text"]'); 
var formselect = $(form).find('select'); 
var json = "{"; 
for (var i = 0; i < formEl.length - 1; i++) { 
var name = formEl.eq(i).attr('name'); 
var val = "'" + formEl.eq(i).val() + "'"; 
json += name; 
json += ":"; 
json += val; 
json += ","; 
} 
var lname = formEl.eq(formEl.length - 1).attr('name'); 
var lval = "'" + formEl.eq(formEl.length - 1).val() + "'"; 
json += lname; 
json += ":"; 
json += lval; 
if (formselect) { 
json += ","; 
for (var i = 0; i < formselect.length - 1; i++) { 
var name = formselect.eq(i).attr('name'); 
var val = "'" + formselect.eq(i).val() + "'"; 
json += name; 
json += ":"; 
json += val; 
json += ","; 
} 
var lname = formselect.eq(formselect.length - 1).attr('name'); 
var lval = "'" + formselect.eq(formselect.length - 1).val() + "'"; 
json += lname; 
json += ":"; 
json += lval; 
} 
json += "}"; 
var jsonObj = eval("(" + json + ")") 
return jsonObj; 
}

接着我们为查询表单的按钮绑定事件,我们扩展下我们的$.page函数
handleQueryLine:function(o){ 
$(o.form).find(".query").click(function(){ 
//$(o.pageForm).append($(o.form).clone(true)); 
$(o.pageForm).empty(); 
$(o.form).find('input[type="text"]').each(function(){ 
var vals = $(this).val(); 
var s = $(this).clone().val(vals); 
$(o.pageForm).append(s); 
}); 
$(o.form).find('select').each(function(){ 
var vals = $(this).val(); 
var s = $(this).clone().val(vals); 
$(o.pageForm).append(s); 
}); 
$.page.query(o); 
}); 
}

ok,基本的函数已经完成,下面完成主函数
$.fn.simplePage = function(os){ 
var options = { 
pager: '.pager',//表格控件的容器 
container: '.tableData',//放置表格数据的容器 
form: '#form',//放置查询条件的表单 
pageForm: '#pageForm',//放置隐藏与的Div 
url: '',//发送请求的地址 
currentPage: 1, 
pageSize: 2, 
type: null,//可选:action, 
pageShow:7//, 
}; 
var o = $.extend(options, os); 
return this.each(function(){ 
o.pager = $(this).find(o.pager); 
o.container = $(this).find(o.container); 
//首先清除click事件 
o.pager.unbind('click'); 
if (o.type == 'action') { 
//指定的动作,比如删除时的事件,这时需要在当前页刷新数据 
o.currentPage = $.page.getPageSize(o); 
o.pageSize = $.page.getCurrentPage(o); 
$.page.loadData(o); 
return; 
} 
$.page.loadData(o); 
$.line.handleQueryLine(o); 
}) 
}

现在我们的分页还不是很好看,我们用firebug查看下生成的分页结构,写了如下样式
.pager a { 
display: block; 
float: left; 
width: 16px; 
height: 16px; 
margin: 5px; 
} 
.pager a.pageA{ 
background:url("../images/grid/page.png") no-repeat left 0px transparent; 
display:inline-block; 
font-size:14px; 
margin:0 3px; 
padding-left:6px; 
text-align:center; 
vertical-align:bottom; 
height:auto; 
width:auto; 
cursor:pointer; 
} 
.pager a.pageA span{ 
background:url("../images/grid/page.png") no-repeat right 0px transparent; 
display:inline-block; 
height:24px; 
line-height:22px; 
padding-right:6px; 
} 
.pager a.pageActive{ 
background:url("../images/grid/page.png") no-repeat left -24px transparent; 
}

大功告成!!

DEMO 下载

Javascript 相关文章推荐
基于jQuery的树控件实现代码(asp.net+json)
Jul 11 Javascript
使用闭包对setTimeout进行简单封装避免出错
Jul 10 Javascript
自己编写的类似JS的trim方法
Oct 09 Javascript
实现前后端数据交互方法汇总
Apr 07 Javascript
js使用setTimeout实现定时炸弹的方法
Apr 10 Javascript
基于Jquery和html5实现炫酷的3D焦点图动画
Mar 02 Javascript
Jquery获取当前城市的天气信息
Aug 05 Javascript
JavaScript实现大图轮播效果
Jan 11 Javascript
详解angular2实现ng2-router 路由和嵌套路由
Mar 24 Javascript
详解如何从零开始搭建Express+Vue开发环境
Jul 17 Javascript
JS中的算法与数据结构之队列(Queue)实例详解
Aug 20 Javascript
使用uni-app开发微信小程序的实现
Dec 13 Javascript
JQuery的Alert消息框插件使用介绍
Oct 09 #Javascript
Tips 带三角可关闭的文字提示
Oct 06 #Javascript
从零开始学习jQuery (二) 万能的选择器
Oct 01 #Javascript
fancybox1.3.1 基于Jquery的插件在IE中图片显示问题
Oct 01 #Javascript
客户端 使用XML DOM加载json数据的方法
Sep 28 #Javascript
jquery选择器(常用选择器说明)
Sep 28 #Javascript
Jquey拖拽控件Draggable使用方法(asp.net环境)
Sep 28 #Javascript
You might like
图书管理程序(三)
2006/10/09 PHP
PHP中将数组转成XML格式的实现代码
2011/08/08 PHP
PHP中如何调用webservice的实例参考
2013/04/25 PHP
PHP向浏览器输出内容的4个函数总结
2014/11/17 PHP
如何修改yii2.0自带的user表为其它的表
2017/08/01 PHP
理解JavaScript中的事件
2006/09/23 Javascript
javascript之大字符串的连接的StringBuffer 类
2007/05/08 Javascript
javascript 实现父窗口引用弹出窗口的值的脚本
2007/08/07 Javascript
JS版网站风格切换实例代码
2008/10/06 Javascript
javascript 多种搜索引擎集成的页面实现代码
2010/01/02 Javascript
javascript 程序库的比较(一)之DOM功能
2010/04/07 Javascript
心扬JS分页函数代码
2010/09/10 Javascript
js中escape对应的C#解码函数 UrlDecode
2012/12/16 Javascript
JS中showModalDialog 的使用解析
2013/04/17 Javascript
js限制文本框只能输入数字方法小结
2014/06/16 Javascript
Javascript常用字符串判断函数代码分享
2014/12/08 Javascript
js常用的继承--组合式继承
2017/03/06 Javascript
详解webpack+express多页站点开发
2017/12/22 Javascript
解决vue.js 数据渲染成功仍报错的问题
2018/08/25 Javascript
微信公众号开发之微信支付代码记录的实现
2019/10/16 Javascript
JS将指定的某个字符全部转换为其他字符实例代码
2020/10/13 Javascript
JS实现简单贪吃蛇小游戏
2020/10/28 Javascript
ubuntu安装sublime3并配置python3环境的方法
2018/03/15 Python
浅谈python中requests模块导入的问题
2018/05/18 Python
Python操作mongodb的9个步骤
2018/06/04 Python
Django集成搜索引擎Elasticserach的方法示例
2019/06/04 Python
Agoda台湾官网:国内外订房2折起
2018/03/20 全球购物
莫斯科的韩国化妆品店:Sifo
2019/12/04 全球购物
企业申诉管理制度
2014/01/30 职场文书
工作求职信
2014/07/04 职场文书
关于运动会的广播稿(10篇)
2014/09/12 职场文书
党建工作汇报材料
2014/12/24 职场文书
通知格式
2015/04/27 职场文书
十大最强飞行系宝可梦,BUG燕上榜,第二是飞行系王者
2022/03/18 日漫
Golang连接并操作MySQL
2022/04/14 MySQL
Elasticsearch Recovery 详细介绍
2022/04/19 Java/Android