表格分页--JSON数据模拟Ajax数据源(原创)

将之前表格分页重写,现在这个插件一页中最多只显示10个页码,而且看起来的效果也挺好的,我还采用了JSON数据模拟了Ajax的处理后动态生成表格。下面是代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>表格分页</title>
    <style>
        *{
            margin:0;
            padding:0;
        }
        table,tr,th,td{
            border-collapse: collapse;
            border:1px solid #bbb;
            padding:5px;
            text-align: center;
        }
        table{
            display: none;
            margin:10px;
            float: left;
        }
        th{
            color: #fff;
            background:#c8dcdd;
            padding: 5px 10px;
        }
        td{
            color:#666;
            background: #e4e6d0;
        }
        ul,li{
            list-style: none;
        }
        .show{
            display: table !important;
        }
        .tableUl{
            float: left;
            width: 100px;
            line-height: 40px;
            text-align: center;
            margin: 10px 20px;
            cursor: pointer;
            border: 1px solid #aaa;
        }
        .tableUl li.active{
            background: blue;
            color: #fff;
        }
        #pageY1,
        #pageY2,
        #pageY3{
            display: none;
            line-height: 35px;
               margin: 5px 0;
        }
        .first,
        .prev,
        .next,
        .last,
        .showPage li{
            float: left;
            font-size: 14px;
            width:60px;
            height: 35px;
            background: #fff;
            color:#337ab7;
            text-align: center;
            border:1px solid #ddd;
            margin-right:5px;
            cursor: pointer;
        }
        .first:hover,
        .prev:hover,
        .next:hover,
        .last:hover,
        .showPage li:hover{
            color: #23527c;
            background-color: #eee;
            border-color: #ddd;
        }
        .first.disable,
        .prev.disable,
        .next.disable,
        .last.disable{
            color:red;
            border:1px solid red;
            cursor: not-allowed;
        }
        ul,li{
            list-style: none;
        }
        .showPage{
            float: left;
        }
        .showPage li{
            width:35px !important;
        }
        .showPage li.active{
            display: list-item;
            color: #fff;
            cursor: pointer;
             background-color: #337ab7;
            border-color: #337ab7;
        }
        .inputToPage{
            float: left;
            width: 35px;
            height: 35px;
            line-height: 35px;
            text-align: center;
            font-size: 14px;
            border: 1px solid #ddd;
            color: #337AB1;
        }
        .btn01{
            float: left;
            line-height: 35px;
            border: 1px solid #ddd;
            padding: 0px 8px;
            color: #23527c;
            cursor: pointer;
            font-size: 14px;
        }
        .span01{
            float: left;
            margin: 0 5px;
            font-size: 14px;
        }
    </style>
</head>
<body>
    <ul class="tableUl">
        <li class="active">表格1</li>
        <li>表格2</li>
        <li>表格3</li>
    </ul>
    <table class="y1 show">
        <tr>
            <th>分店名(表格一)</th>
            <th>支付类型(表格一)</th>
            <th>金额(表格一)</th>
        </tr>
    </table>
    <table class="y2">
        <tr>
            <th>分店名(表格二)</th>
            <th>支付类型(表格二)</th>
            <th>金额(表格二)</th>
        </tr>
    </table>
    <table class="y3">
        <tr>
            <th>分店名(表格三)</th>
            <th>支付类型(表格三)</th>
            <th>金额(表格三)</th>
        </tr>
    </table>
    <br>
    <!-- 当前页码 -->
    <input type="hidden" id='showNow'>
    <div id="page">
        <div id="pageY1"></div>
        <div id="pageY2"></div>
        <div id="pageY3"></div>
    </div>
    <script>
        //JSON类型tab假设是Ajax请求的数据源
        var tab = [{"jine":151.2,"fendianming":"分店一","zhifuleixing":"OTA挂账"},{"jine":885.76,"fendianming":"分店一","zhifuleixing":"阿里预付"},{"jine":93,"fendianming":"分店一","zhifuleixing":"财付通(前台)"},{"jine":2700,"fendianming":"分店一","zhifuleixing":"applePay(前台)"},{"jine":904,"fendianming":"分店一","zhifuleixing":"applePay(预付)"},{"jine":-200,"fendianming":"分店一","zhifuleixing":"applePay返还"},{"jine":124.2,"fendianming":"分店一","zhifuleixing":"短租预付"},{"jine":100,"fendianming":"分店一","zhifuleixing":"挂账(协议卡)"},{"jine":760,"fendianming":"分店一","zhifuleixing":"汇款"},{"jine":288,"fendianming":"分店一","zhifuleixing":"积分预付"},{"jine":188,"fendianming":"分店一","zhifuleixing":"积分支付"},{"jine":500,"fendianming":"分店一","zhifuleixing":"美元"},{"jine":7470.8,"fendianming":"分店一","zhifuleixing":"团购预付(人民币)"},{"jine":300,"fendianming":"分店一","zhifuleixing":"团购预付(团购)"},{"jine":1200,"fendianming":"分店一","zhifuleixing":"人民币预付"},{"jine":5398.6,"fendianming":"分店一","zhifuleixing":"团购"},{"jine":9406,"fendianming":"分店一","zhifuleixing":"微信(前台)"},{"jine":1035,"fendianming":"分店一","zhifuleixing":"微信(预付)"},{"jine":1181491.16,"fendianming":"分店一","zhifuleixing":"现金"},{"jine":-79108.28,"fendianming":"分店一","zhifuleixing":"现金支出"},{"jine":1072.8,"fendianming":"分店一","zhifuleixing":"亚洲旅行社折扣"},{"jine":776.32,"fendianming":"分店一","zhifuleixing":"团购预付(人民币)"},{"jine":78642.2,"fendianming":"分店一","zhifuleixing":"银行卡"},{"jine":10200,"fendianming":"分店一","zhifuleixing":"预授权"},{"jine":5232.1,"fendianming":"分店一","zhifuleixing":"支付宝(前台)"},{"jine":1776,"fendianming":"分店一","zhifuleixing":"转账代付"},{"jine":205,"fendianming":"分店二","zhifuleixing":"applePay(预付)"},{"jine":205,"fendianming":"分店二","zhifuleixing":"微信(预付)"}];
    </script>
    <script src='jquery-1.7.2.js'></script>
    <script>
        $(function(){
            //随着li的切换将table也进行切换
            $('.tableUl li').click(function(){
                var i = $(this).index();
                $('.tableUl li').removeClass('active').eq(i).addClass('active');
                var index = i + 1;
                $('table').removeClass('show');//将所有表格隐藏
                $('.y'+index).addClass('show');//li对应的表格显示
                var html = '';
                $('.y'+index+' tr').has('td').remove();//将表格tr含有td的去除。
                for(var j=0;j<tab.length;j++){
                    html += '<tr><td>'+ tab[j].fendianming +'</td><td>'+ tab[j].zhifuleixing +'</td><td>'+ tab[j].jine +'</td></tr>'
                }
                $('.y'+index).append(html);
                $('#page div').hide().eq(i).css('display','inline-block');
                //pages(页码显示div的ID,对应分页表格的类,tr中含有th的数量,一页中要显示的列数)
                if(index==1){
                    pages("#pageY"+index,'.y'+index,1,30);
                }else if(index==2){
                    pages("#pageY"+index,'.y'+index,1,20);
                }else{
                    pages("#pageY"+index,'.y'+index,1,2);
                }
            })

            function pages(object1,object2,tableN,showN){
                page(object1,object2,tableN,showN);
                var tableId;//表格ID
                var tableHeader;//表头th
                var tableRow;//获取tr对象
                var showNumber;//一页显示的行数
                var pageNum;//计算页码数
                var start_show;//显示页码开始位置,页码默认0
                var end_show = 10;//显示页码结束位置,默认最多只显示10条页码。
                function page(obj1,obj2,tabNum,showNum){
                    $('#page div').html('');
                    //隐藏域默认值
                    $("#showNow").val(0);//当前页码初始化为0
                    tableHeader = tabNum;
                    showNumber = showNum;
                    var first = '<span class="first disable">第一页</span>';
                    var prev = '<span class="prev disable">上一页</span>';
                    $(obj1).append(first);
                    $(obj1).append(prev);
                    //获取table表格中tr
                    tableRow = $(obj2+" tr");
                    //获取除了表头(标题)以外tr的总数量
                    var allNum = tableRow.size()- tabNum;
                    //计算页码数
                    pageNum = Math.ceil(allNum/showNum);
                    start_show = 0;
                    end_show = pageNum > 10 ? 10 : pageNum;
                    var ul = document.createElement('ul');
                    ul.className = 'showPage';
                    for(var i=1;i<=pageNum;i++){
                        var li = document.createElement('li');
                        li.innerHTML = i;
                        ul.appendChild(li);
                    }
                    $(obj1).append(ul);
                    $('.showPage li').hide().slice(0,end_show).show();
                    $(obj1+' .showPage li').eq(0).addClass('active');
                    if(end_show==1){
                        var next = '<span class="next disable">下一页</span>';
                        var last = '<span class="last disable">最后一页</span>';    
                    }else{
                        var next = '<span class="next">下一页</span>';
                        var last = '<span class="last">最后一页</span>';
                    }
                    $(obj1).append(next);
                    $(obj1).append(last);
                    tableRow.hide().slice(0,showNum + tabNum).css('display','table-row');
                    var str = '<span class="span01">跳转到第</span><input type "text" class="inputToPage" value="1"/><span class="span01">页</span><input type="button" class="btn01" value="提交"/><span class="span01">总共'+ pageNum +'页</span>';
                    $(obj1).append(str);
                }
                $('.showPage li').click(function(){
                    var i = $(this).index();
                    $('.showPage li').removeClass('active').eq(i).addClass('active');
                    $('#showNow').val((i));
                    gotoPage(i);
                    if(pageNum > 1){
                        if(i==0){
                            $('.first').addClass('disable');
                            $('.prev').addClass('disable');
                            $('.next').removeClass('disable');
                            $('.last').removeClass('disable');
                        }else if(i == pageNum - 1){
                            $('.first').removeClass('disable');
                            $('.prev').removeClass('disable');
                            $('.next').addClass('disable');
                            $('.last').addClass('disable');    
                        }else{
                            $('.first').removeClass('disable');
                            $('.prev').removeClass('disable');
                            $('.next').removeClass('disable');
                            $('.last').removeClass('disable');    
                        }
                    }else{
                        $('.first').addClass('disable');
                        $('.prev').addClass('disable');
                        $('.next').addClass('disable');
                        $('.last').addClass('disable');
                    }
                })
                $('.first').click(function(){
                    if(!$(this).hasClass('disable')){
                        gotoPage(0);
                        $('.showPage li').removeClass('active').eq(0).addClass('active');
                        $('#showNow').val(0);
                        $('.first').addClass('disable');
                        $('.prev').addClass('disable');
                        $('.next').removeClass('disable');
                        $('.last').removeClass('disable');
                        start_show = 0;
                        if(pageNum > 9){
                            end_show = start_show + 10;
                        }else{
                            end_show = start_show + pageNum;
                        }
                        $('.showPage li').hide().slice(start_show,end_show).show();
                    }
                })
                $('.prev').click(function(){
                    if(!$(this).hasClass('disable')){
                        var j = $("#showNow").val();
                        j--;
                        gotoPage(j);
                        $("#showNow").val(j);
                        if(j < start_show){
                            start_show = j;
                            if(pageNum > 9){
                                end_show = start_show + 10;
                            }else{
                                end_show = start_show + pageNum;
                            }
                            $('.showPage li').hide().slice(start_show,end_show).show();
                        }
                        $('.showPage li').removeClass('active').eq(j).addClass('active');
                        if(j == 0){
                            $('.first').addClass('disable');
                            $('.prev').addClass('disable');
                        }
                        $('.next').removeClass('disable');
                        $('.last').removeClass('disable');
                    }
                })
                $('.next').click(function(){
                    if(!$(this).hasClass('disable')){
                        var j = $("#showNow").val();
                        $('.first').removeClass('disable');
                        $('.prev').removeClass('disable');
                        j++;
                        gotoPage(j);
                        if(j > end_show - 1){
                            end_show = j + 1;
                            if(pageNum > 9){
                                start_show = end_show - 10;
                            }else{
                                start_show = 0;
                            }
                            $('.showPage li').hide().slice(start_show,end_show).show();
                        }
                        $('.showPage li').removeClass('active').eq(j).addClass('active');
                        $("#showNow").val(j);            
                        if(j == pageNum - 1){
                            $('.next').addClass('disable');
                            $('.last').addClass('disable');
                        }
                    }
                })
                $('.last').click(function(){
                    if(!$(this).hasClass('disable')){
                        var j = pageNum - 1;
                        gotoPage(j);
                        $("#showNow").val(j);
                        $('.showPage li').removeClass('active').eq(j).addClass('active');
                        $('.first').removeClass('disable');
                        $('.prev').removeClass('disable');
                        $('.next').addClass('disable');
                        $('.last').addClass('disable');
                        end_show = pageNum;
                        if(pageNum > 9){
                            start_show = end_show - 10;
                        }else{
                            start_show = 0;
                        }
                        $('.showPage li').hide().slice(start_show,end_show).show();
                    }
                })
                $('.btn01').click(function(){
                    if($('.inputToPage').val() < 1 || $('.inputToPage').val() > pageNum){
                        alert('输入有误!,请重新输入');
                    }else{
                        var new_page = $('.inputToPage').val() - 1;
                        gotoPage(new_page);
                        $("#showNow").val(new_page);
                        end_show = (new_page + 10) > (pageNum - 1) ? pageNum : new_page + 10;
                        start_show = end_show - 10;
                        $('.showPage li').removeClass('active').eq(new_page).addClass('active');
                        $('.showPage li').hide().slice(start_show,end_show).show();
                        if(pageNum > 1){
                            if(new_page == 0){
                                $('.first').addClass('disable');
                                $('.prev').addClass('disable');
                                $('.next').removeClass('disable');
                                $('.last').removeClass('disable');
                            }else if(new_page == pageNum - 1){
                                $('.first').removeClass('disable');
                                $('.prev').removeClass('disable');
                                $('.next').addClass('disable');
                                $('.last').addClass('disable');
                            }else{
                                $('.first').removeClass('disable');
                                $('.prev').removeClass('disable');
                                $('.next').removeClass('disable');
                                $('.last').removeClass('disable');
                            }
                        }else{
                            $('.first').addClass('disable');
                            $('.prev').addClass('disable');
                            $('.next').addClass('disable');
                            $('.last').addClass('disable');
                        }
                    }
                })
                function gotoPage(obj1){
                    var begin = obj1 * showNumber + tableHeader ;
                    var end = begin + showNumber;
                    tableRow.hide().slice(begin,end).css('display','table-row');
                    tableRow.slice(0,tableHeader).css('display','table-row');
                }
            }
        })
    </script>
</body>

</html>

代码中有注释了,我就不再分析了--(就爱简单粗暴)。

下面我来说一下,插件具体需要哪些基本的配置

1、一个表格table并给其创建类或者ID,

2、在html代码中加入

这段代码,在这段代码中<input type="hidden" id="showNow">不可以改变,如果想要改变需要随便将pages插件源码中也进行修改,下面是具体位置

第一处:

第二处:

第三处:

第四处:

第五处:

第六处:

最后一处:

 

看到这里你是不是觉得没必要修改,鄙人建议不要修改--(不过简单有效的方法是,可以采用记事本的替换),

 3、将

<div id="page">  /*id="page"同上一样我已经写死在插件里面了,修改建议采用记事本替换*/

   <div id="pageY1"></div>   /*ID名或者class名需要自己起(代码中的仅供参考),需要注意的是这里面的div也是在插件中写死的,修改方法同上*/

</div>

好了,插件的一些要求和注意我就说到这里(在大神眼中应该算是废话--不喜勿喷),如果有其他的问题,希望给我留言(如果有哪位大神能帮我优化插件,小弟我不胜感激),有需要的就直接拿去用。

 

对了,上面插件的样式,排版这些都是我临时写的,不太好看,建议大家自己写css样式。

 

posted @ 2017-05-09 00:55  Tsingtree  阅读(316)  评论(0编辑  收藏  举报