思路:注意,total表示总页数,current表示当前高亮的页数,最多连续显示五页,其中12345则是最大的没有首页尾页,其中123456且当前为3是最小的只显示尾页,其中当前页居中后面最少两页加一个尾页,即如果尾页减去当前页小于3则只显示首页,反之首页尾页均显示。

<script type="text/javascript">
  function Pagination(container, total, current) {
    this.total = total;
    this.current = current;
    this.html = html;
    this.val = val;
    //界面中存在id=jsContainer的节点A
    this.el = document.querySelector('.pagination'); //TODO: 创建分页组件根节点
    if (!this.el) return;
    this.val()
    this.el.innerHTML = this.html();
    container.appendChild(this.el);
    //total <= 1 时,隐藏该组件
    if (this.total <= 1) {
        this.el.className = 'hide'; //TODO: 判断是否需要隐藏当前元素
    }
    function html() {
        if (this.total <= 1) return '';
        // 如果total<=5,则显示全部页数,隐藏“首页”和“末页”元素
        // 小于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) {
            // 判断是否显示首页末页
            // 当current居中不足5页,向后(前)补足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();
    };
}
</script>

总结:首先读清题意,其次明确哪里待完善,最后考虑如何完善。