js中的分页

Posted 阿弥陀佛么么哒!

tags:

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

分页是前端经常会用到的一个非常实用的一个知识点,今天闲来没事,做了一个小demo,虽然样子,比较丑,哈哈哈,但是这是分页的核心思想都在,希望能给某个小伙伴一些启发。可直接复制在编辑器中运行。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
        <style type="text/css">
            a{
                margin:5px;
            }
        </style>
    </head>
    <body>
        <div id="div1">
            
        </div>
    </body>
    <script>
        //采用组件的写法
        page({
            id:‘div1‘,
            nowNum:10,    //当前的页码
            allNum:10,    //总共的页码
            callBack:function(now,all){
                alert(‘当前页:‘+now+‘总共页:‘+all);
            }
        })
        function page(opt){
            if(!opt.id)return false;    //如果没有传元素,就不向下执行了
            var obj = document.getElementById(opt.id);
            var nowNum = opt.nowNum || 1;        //默认的处理
            var allNum = opt.allNum || 5;
            var callBack = opt.callBack || function(){};
            //首页
            if(nowNum>=4&&allNum>=6){
                var oA = document.createElement(‘a‘);
                oA.href = ‘#1‘;
                oA.innerHTML = ‘首页‘;
                obj.appendChild(oA);
            }
            //上一页
            if(nowNum>=2){
                var oA = document.createElement(‘a‘);
                oA.href = ‘#‘+(nowNum-1);
                oA.innerHTML = ‘上一页‘;
                obj.appendChild(oA);
            }
            //当总页数小于等于5页的情况
            if(allNum<=5){
                for(var i=1;i<=allNum;i++){
                    var oA = document.createElement(‘a‘);
                    oA.href = ‘#‘+i;
                    if(nowNum == i){        //当前页的处理
                        oA.innerHTML = i;
                    }else{
                        oA.innerHTML = ‘[‘ + i + ‘]‘;    
                    }
                    obj.appendChild(oA);
                }
            }else{        //当总页数大于5页的情况
                
                for(var i=1;i<=5;i++){
                    var oA = document.createElement(‘a‘);
                    if(nowNum == 1 || nowNum == 2){        //对当前页是第一页和第二页的时候做一个特殊处理
                        oA.href = ‘#‘+ i;
                        if(nowNum == i){
                            oA.innerHTML = i;
                        }else{
                            oA.innerHTML = ‘[‘ + i + ‘]‘;
                        }
                    }else if((allNum-nowNum) == 0 || (allNum-nowNum) == 1){        //最后两个页码做特殊处理
                        oA.href = ‘#‘+ (allNum-5+i);
                        if((allNum - nowNum) == 0 && i == 5){            //这一块的逻辑较为复杂
                            oA.innerHTML = (allNum -5+i);
                        }else if((allNum - nowNum) == 1 && i == 4){
                            oA.innerHTML = (allNum -5+i);
                        }else{
                             oA.innerHTML = ‘[‘+(allNum-5+i)+‘]‘;
                        }
                    }else{
                        oA.href = ‘#‘+ (nowNum-3+i);
                        if(i==3){
                            oA.innerHTML = (nowNum-3+i);
                        }else{
                            oA.innerHTML = ‘[‘+(nowNum-3+i)+‘]‘;
                        }
                        
                    }
                    obj.appendChild(oA);
                }
            }
            
            //下一页
            if((allNum-nowNum)>=1){
                var oA = document.createElement(‘a‘);
                oA.href = ‘#‘+(nowNum+1);
                oA.innerHTML = ‘下一页‘;
                obj.appendChild(oA);
            }
            //尾页
            if((allNum-nowNum)>=3 && allNum>=6){
                var oA = document.createElement(‘a‘);
                oA.href = ‘#‘+allNum;
                oA.innerHTML = ‘尾页‘;
                obj.appendChild(oA);
            }
            //执行回调
            callBack(nowNum,allNum);
            //添加点击事件
            var aA = obj.getElementsByTagName(‘a‘);
            for(var i=0;i<aA.length;i++){
                aA[i].onclick = function(){
                    var nowNum = parseInt(this.getAttribute(‘href‘).substring(1))            //注意这里获取href的时候不要用this.href,因为这样获取到的是一个绝对地址,要用getAttribute
                    //获取到此刻的页码,重新渲染
                    obj.innerHTML = ‘‘;        //清空
                    page({
                        id:opt.id,
                        nowNum:nowNum,
                        allNum:allNum,
                        callBack:callBack
                    });
                    return false;    //阻止默认事件
                }
            }
            
        }
    </script>
</html>

 

以上是关于js中的分页的主要内容,如果未能解决你的问题,请参考以下文章

GatsbyJS 博客中的分页

采用Vue2.0开发的分页js组件

怎么用js来实现页面的分页,有案列代码吗?请给个代码看看,谢谢

不断收到 DiscordAPIError:在 Discord.js 中的音乐机器人上使用 reconlx 的分页执行队列命令时出现未知交互

使用 React Router v4.1 的分页问题

react.js中如何实现对表中列表数据的分页?