ES6模板字符串分页实现

原生分页的思路(原理):
首先和产品经理定一下每页显示多少条目,

  • 然后通过后台的某一个数据接口,获取某一页的数据(需要给这个接口传入页码这个参数),
  • 咱们仅仅需要去如何显示数据即可。
  • 术语:页码、每页显示条目、数据总数、每页数据列表
  • 其中 每页显示条目是动态的(咱们这个demo暂时定义为每页显示5条数据)
  • 总数是接口里提供的,页码数需要根据总数和每页条目数 去计算的

//全局缓存所有数据(为了计算某一页的数据,注意:将来真实开发不需要这么做)

            var personsList = null;
            //全局缓存数据总条数(select count(*) from person )
            var totalCount = 0;
            //当前页码
            var currentPageNo = 1;
            
            //计算有多少页(初始化页码按钮)
            function initBtn () {
                $.getJSON('data.json', null, function (resultData) {
                    console.log(resultData);
                    //缓存到本地
                    personsList = resultData.persons;
                    totalCount = resultData.totalCount;
                    
                    //定义模板字符串
                    var str = ``;
                    
                    //页码个数(页码按钮) = 向上取整(数据总数 / 每页条目(默认5条))
                    for (var i = 1; i <= Math.ceil(totalCount / 5); i++) {
                        //创建页码按钮
                        if (i == 1) {
                            str += `<a href="###" name="p" style="background:orange;color:#fff;">${ i }</a>`;   
                        } else {
                            str += `<a href="###" name="p" >${ i }</a>`;
                        }
                    }
                    $('.prev').after(str);
                    
                    
                    //给所有按钮办定事件
                    $('.fenye a').on('click', fenyeFn);
                    
                    //默认显示第一页的数据
                    showData(currentPageNo);
                });
            }
            
            initBtn();
            
            //构建某一页的数据
            function showData (pageNo) {
                //这里是为了模拟后台操作,去匹配某一页的数据,将来真实开发不需要写以下这个算法
                var currentArr = personsList.slice((pageNo - 1) * 5, pageNo * 5);
//              console.log(currentArr);
                var str = ``;
                for (var tempPerson of currentArr) {
                    str += `<tr>
                                <td>${ tempPerson.name }</td>
                                <td>${ tempPerson.sex }</td>
                                <td>${ tempPerson.age }</td>
                                <td>${ tempPerson.addr }</td>
                            </tr>`;
                }
                $('tbody').html(str);
            }
            
            //分页按钮点击逻辑
            function fenyeFn () {
                //1、处理页码数的逻辑
//              console.log($(this).html());
                switch ($(this).html()) {
                    case '首页':
                        currentPageNo = 1;
                    break;
                    case '<<上一页':
                        currentPageNo--;
                    break;
                    case '下一页>>':
                        currentPageNo++;
                    break;
                    case '尾页':
                        currentPageNo = Math.ceil(totalCount / 5);
                    break;
                    default:
                        currentPageNo = parseInt($(this).html());
                }
                console.log(currentPageNo);

//2、处理首尾、上下按钮的隐藏显示逻辑

            if (currentPageNo == 1) {
                $('.start').css('display', 'none');
                $('.prev').css('display', 'none');
            } else {
                $('.start').css('display', 'inline-block');
                $('.prev').css('display', 'inline-block');
            }
            
            if (currentPageNo == Math.ceil(totalCount / 5)) {
                $('.end').css('display', 'none');
                $('.next').css('display', 'none');
            } else {
                $('.end').css('display', 'inline-block');
                $('.next').css('display', 'inline-block');
            }

//3、处理按钮颜色的逻辑

            //获取页码按钮
            var $pageBtn = $('[name=p]');
            //先把这几个按钮的样式还原成默认
            $pageBtn.css({
                background : '#fff',
                color : '#999'
            });
            //然后在处理当前页码数对应的按钮样式
            $pageBtn[currentPageNo - 1].style.background = 'orange';
            $pageBtn[currentPageNo - 1].style.color = '#fff';
            
            //4、显示数据
            showData(currentPageNo);
        }

上面的部分:

    <link rel="stylesheet" type="text/css" href="css/style.css"/>
    <script type="text/javascript" src="lib/jquery.js" ></script>
截屏效果图

<body>

    <table id="my_table" border="1px">
        <thead>
            <tr>
                <th>姓名</th>
                <th>性别</th>
                <th>年龄</th>
                <th>住址</th>
            </tr>
        </thead>
        <tbody>
             <!--<tr>
                <td>刘升升</td>
                <td>男</td>
                <td>18</td>
                <td>二拨子新村</td>
            </tr>
            <tr>
                <td>刘升升</td>
                <td>男</td>
                <td>18</td>
                <td>二拨子新村</td>
            </tr>
            <tr>
                <td>刘升升</td>
                <td>男</td>
                <td>18</td>
                <td>二拨子新村</td>
            </tr>
            <tr>
                <td>刘升升</td>
                <td>男</td>
                <td>18</td>
                <td>二拨子新村</td>
            </tr> -->
        </tbody>
    </table>
    <div class="fenye">
        <a href="###" class="start">首页</a>
        <a href="###" class="prev"><<上一页</a>
        <!--<a href="###" name="p" style="background:orange;color:#fff;">1</a>
        <a href="###" name="p" >2</a>
        <a href="###" name="p" >3</a>-->
        <a href="###" class="next">下一页>></a>    
        <a href="###" class="end" >尾页</a>       
    </div>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,125评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,293评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,054评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,077评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,096评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,062评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,988评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,817评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,266评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,486评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,646评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,375评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,974评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,621评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,642评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,538评论 2 352

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,056评论 25 707
  • 一、文本框为字符型 必填项非空校验: 1、必填项未输入--程序应提示错误; 2、必填项只输入若干个空格,未输入其它...
    许小小晴阅读 4,626评论 0 2
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,651评论 18 139
  • 2017年1月8日19点,2016年重庆市校园网络小说大赛颁奖晚会在九龙坡区举行。重庆出版集团党委委员、副总编辑、...
    7924b67566b6阅读 534评论 0 0
  • 已完成: 富裕,属于口袋装满快乐的人 阿纳丝塔夏 优雅 我的风格小黑皮书 俄罗斯的冥想雪松 怦然心动的人生整理魔法...
    一粒微尘_阅读 171评论 0 0