通用分页 (基于jquerybootstrap)

Posted 暴疯禹

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通用分页 (基于jquerybootstrap)相关的知识,希望对你有一定的参考价值。

 基于bootstrap的"通用分页"v2.0(有人用的话,我可以升级)

实现:

          1.同一个页面下,多个分页条互不干扰。

          2.配置、使用方便。

          3.通过配置、修改容器的属性(pagenumber、totalpage、paginationMaxLength、onlyOnePageIsShow),来动态改变分页条

参数:

          1.pagenumber                       当前页码(必填)

          2.totalpage                            总页数(必填)

          3.paginationMaxLength         页码最大显示长度数(默认10,可以去pagination.js中设置)

          4.onlyOnePageIsShow          只有一页的时候是否显示(默认true,可以去pagination.js中设置)

回调函数:

          1.回调函数 paginationClick(pagination_id) :                 pagination_id是单击页码<li>时对应的容器的id。所以容器一定要有id(如下div)

常用的方法:

          1.Initpagination(element);                         初始化或更新 element分页条

          2.paginationInit();                                      初始化或更新 所有分页条

====================================================================================================================================

测试代码:
<script src="http://libs.baidu.com/jquery/2.0.0/jquery.js"></script>
<script src="http://libs.baidu.com/bootstrap/3.0.3/js/bootstrap.min.js"></script>
<link href="http://libs.baidu.com/bootstrap/3.0.3/css/bootstrap.css" rel="stylesheet">
<script src="pagination.js"></script>

<div id="test1" style="text-align: center;" pagination="pagination_new" pagenumber="11" totalpage="13"></div>
<hr >
<div id="test2" style="text-align: center;" pagination="pagination_new" pagenumber="14" totalpage="15" ></div>
<hr >
<div id="test3" style="text-align: center;" pagination="pagination_new" pagenumber="1" totalpage="1" onlyOnePageIsShow="false"></div>
<hr >
<div id="test4" style="text-align: center;" pagination="pagination_new" pagenumber="1" totalpage="1" ></div>
<hr >
<div id="test5" style="text-align: center;" pagination="pagination_new" pagenumber="10" totalpage="15" paginationMaxLength="5" onlyOnePageIsShow="false"></div>
<hr/>
<button id="btn1">手动刷新指定分页条</button>
<button id="btn2">手动刷新全部分页条</button>
<script>
    function paginationClick(pagination_id)
        var pagenumber = $('#'+pagination_id+'').attr('pagenumber');
        var totalpage = $('#'+pagination_id+'').attr('totalpage');
        alert('zmy通用分页测试:当前id:'+pagination_id+' , pagenumber:'+pagenumber+' , totalpage:'+totalpage);
    
    $(function()
        $('#btn1').click(function()
            $('#test3').attr('pagenumber','2');
            $('#test3').attr('totalpage','4');
            initPagination($('#test3'));
        );
        $('#btn2').bind('click',function()
            $('#test3').attr('pagenumber','2');
            $('#test3').attr('totalpage','4');

            $('#test1').attr('pagenumber','7');
            $('#test1').attr('totalpage','10');
            $('#test1').attr('paginationMaxLength','6');
            paginationInit();
        );
    );
</script>

================================华丽的分隔符====================================

结果:

 

1.2.3.4.5.

==================================华丽的分隔符====================================

pagination.js源码

/**
 * Created by zmy on 2016/7/13.
 */

var paginationMaxLength=10;//分页栏的最大显示条数
var onlyOnePageIsShow = true;//只有一页的时候是否显示
function paginationInit()
    $('[pagination =pagination_new ]').each(function()
        initPagination($(this));
    );

function isNeedPagination(totalpage,settingfromhtml)
    var condition ;
    if(settingfromHTML == "true")
        condition = true;
    else if(settingfromHTML == 'false')
        condition = false;
    else 
        condition = onlyOnePageIsShow;
    
    if(condition && totalpage<1)
        return false;
    else if(!condition && totalpage<=1)
        return false;
    
    return true;

function setDisplayMaxLength(element,len)
    var currentpage =  Number(element.attr('pagenumber'));
    var totoalpage = Number(element.attr('totalpage'));
    if(checkParamIsPositiveInteger(len))
        len = Number(len);
    else
        len =paginationMaxLength;
    
    if(len<totoalpage)
        var temp1 = parseInt((len-1)/2);
        var temp2 = parseInt(len/2);
        if(temp1<temp2)
            var leftstart = currentpage - temp1;
            var rightend = currentpage + temp1 + 1;
        else
            var leftstart = currentpage - temp1;
            var rightend = currentpage + temp1;
        
        if(leftstart<1)
            rightend +=(1-leftstart);
            leftstart = 1;
        
        if(rightend>totoalpage)
            if(leftstart>1)
                leftstart -=(rightend-totoalpage);
            
            rightend =totoalpage;
        
        if(leftstart<1)
            leftstart=1
        
        while(leftstart >1)
            element.children('ul').children('li[value = '+(--leftstart)+']').css('display','none');
        
        while(rightend <totoalpage)
            element.children('ul').children('li[value = '+(++rightend)+']').css('display','none');
        
    

//根据页面pagenumber、my_totoalpage更新分页,参数element传的是分页的容器
function initPagination(element)
    element.html('');
    var pagenumber = element.attr('pagenumber');
    var totalpage = element.attr('totalpage');
    var pMaxLength = element.attr('paginationMaxLength');
    var onePageIsShow = element.attr('onlyOnePageIsShow');
    if(isNeedPagination(Number(totalpage),onePageIsShow))
        var content = '<ul class="pagination"><li value="0"><a href="javascript:void(0);">«</a></li>';
        for(var i =1; i<=totalpage;i++)
            content +='<li value="'+i+'"><a href="javascript:void(0);">'+i+'</a></li>'
        
        content +='<li value="-1"><a href="javascript:void(0);">»</a></li></ul>';
        element.append(content);
        element.children('ul').children('li[value='+pagenumber+']').attr('class','active');
        setDisplayMaxLength(element,pMaxLength);
        addClickListener(element);
    

function addClickListener(element)
    element.children('ul').children('li').bind('click',function()
        var temp = Number($(this).attr('value'));
        var pagenumber = Number($(this).parent().parent().attr('pagenumber'));
        var totalpage = Number($(this).parent().parent().attr('totalpage'));
        if(temp == 0)
            temp = pagenumber-1;
        else if(temp == -1)
            temp = pagenumber+1;
        
        if(temp != pagenumber && temp !=0 && temp<=totalpage)
            $(this).parent().parent().attr('pagenumber',temp);
            paginationClick(element.attr("id"));
            initPagination(element);
        
        return false;
    )

function checkParamIsPositiveInteger(param)
    var reg = /^[1-9]+[0-9]*]*$/;
    return reg.test(param);


//用户需要自己实现的点击事件,参数为分页容器的id
function paginationClick(pagination_id)


$(function()
    paginationInit();
);

以上是关于通用分页 (基于jquerybootstrap)的主要内容,如果未能解决你的问题,请参考以下文章

基于Vue的简单通用分页组件

如何使用基于 Django 类的通用 ListViews 的分页?

Mybatis插件:自定义插件分页及通用Mapper

基于JEECG制作一个通用的级联字典选择控件-DictCascadeUniversal

基于JEECG制作一个通用的级联字典选择控件-DictCascadeUniversal

基于JEECG制作一个通用的级联字典选择控件-DictCascadeUniversal