题解 | #分页组件#

分页

http://www.nowcoder.com/practice/71da71df9d1c4af9b8dc056213473ba7

// newcoder不能调试太折磨了,首先要搞清楚几个实例属性的含义
// 一开始没有仔细读题,直接去构造了<ul><li>···</li></ul>,以为是直接将ul挂到#jsContainer,怎么都过不去,看了楼上的HXD的题解才明白自己错哪了
//    实例属性
//    this.total 页面总数
//    this.current 当前页
//    this.html 构造根节点下的html代码的方法
//    this.val 

function Pagination(container, total, current) {
    this.total = total;
    this.current = current;
    this.html = html;
    this.val = val;
    this.el = document.querySelector('.pagination'); //TODO: 创建分页组件根节点
    if (!this.el) return;
    this.val()
    this.el.innerHTML = this.html();
    container.appendChild(this.el);

    if (this.total <= 1) {
        this.el.className = 'hide'; //TODO: 判断是否需要隐藏当前元素
    }

    function html() {
        if (this.total <= 1) return '';
        // 小于5页
        let li = ''
        if (this.total <= 5) {
            for (let i = 1; i <= total; i++) {
                if (this.current == i) {
                    li += `<li class="current">${i}</li>`
                } else {
                    li += `<li>${i}</li>`
                }
            }
        } else if (this.total > 5) {
            // 判断是否显示首页末页
            // 只显示末页
            if (this.current <= 3) {
                for (let i = 1; i <= 5; i++) {
                    if (this.current === i) {
                        li += `<li class="current">${i}</li>`
                    } else {
                        li += `<li>${i}</li>`
                    }
                }
                li += `<li>末页</li>`
            } else if (this.total - this.current < 3) {
                // 只显示首页
                li += `<li>首页</li>`
                for (let i = this.total - 4; i <= this.total; i++) {
                    if (this.current === i) {
                        li += `<li class="current">${i}</li>`
                    } else {
                        li += `<li>${i}</li>`
                    }
                }
            } else {
                // 首末页都要显示
                li += `<li>首页</li>`
                for (let i = this.current - 2; i <= this.current + 2; i++) {
                    if (this.current === i) {
                        li += `<li class="current">${i}</li>`
                    } else {
                        li += `<li>${i}</li>`
                    }
                }
                li += `<li>末页</li>`
            }
        }
        return li
    }

    function val(current) {
        if (arguments.length === 0) return this.current;
        if (current < 1 || current > this.total || current === this.current) return;
        this.current = current;
        this.el.innerHTML = this.html();
    };
}
全部评论

相关推荐

11-11 14:21
西京学院 C++
无敌混子大王:首先一点,不管学校层次怎么样,教育经历放在第一页靠上位置,第一页看不到教育经历,hr基本直接扔掉了
点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务