文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>(jQuery)实现简单的分页控件

(jQuery)实现简单的分页控件

时间:2010-10-08  来源:前端开发(想念ling)

1:效果图

2:素材

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;
    
    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;

width:auto;
cursor:pointer;
}
.pager a.pageA span{
background:url("../images/grid/page.png") no-repeat  right 0px transparent;
display:inline-block;

line-
padding-right:6px;
}
.pager a.pageActive{
background:url("../images/grid/page.png") no-repeat  left -24px transparent;
}
大功告成!!

DEMO 下载








相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载