原生JavaScript实现分页组件:DOM操作与逻辑详解

作者:流萤

时间:2026-10-24

浏览:569

本文详解如何使用原生JavaScript实现一个分页组件。重点解析如何通过DOM操作动态生成页码,处理nextSibling节点遍历中的文本节点干扰,并实现根据total和current值动态显示或隐藏首页、末页及高亮当前页的复杂逻辑。

文章目录

分页组件需求概述

分页组件是Web开发中常见的功能模块。请完成pagination函数,在id为jsPagination的DOM元素中实现分页显示部分,具体需求如下。

1、最多连续显示5页,居中高亮显示current页(如demo1所示)。 2、当total为0时,隐藏整个元素(如demo2所示)。 3、如果total小于等于5,则显示全部页数,隐藏“首页”和“末页”元素(如demo3所示)。 4、当current居中不足5页时,向后(前)补足5页,隐藏“首页”(“末页”)元素(如demo4和demo5所示)。 5、total和current均为正整数,且满足1 <= current <= total。

分页组件需求概述

原生JS实现关键点

使用原生JavaScript实现上述分页组件需求,需注意以下关键点。

1:在获取<li>标签时,由于相邻的<li>标签之间存在文本节点,需要连续两次使用nextSibling属性。

page = page.nextSibling.nextSibling;

2:提供的<li>标签的innerHTML初始为空,需要向其中添加页码,并根据需求中的五种情况编写相应逻辑。

3:特别注意首页和末页的隐藏逻辑。当current-2小于等于1时隐藏首页,当current+2大于等于total时隐藏末页。需要确保在demo1、demo3、demo4、demo5中正确隐藏首页和末页(其中demo1中首页和末页的隐藏容易被忽略!)。

HTML、CSS与JS代码实现

HTML结构部分。


<ul class="pagination" id="jsPagination">
    <li>首页</li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li>末页</li>
</ul>

CSS样式部分。


.hide{
    display: none!important;
}
.pagination{
    margin: 0 auto;
    padding: 0;
    list-style: none;
    text-align: center;
}
.pagination li{
    display: inline-block;
    width: 30px;
    height: 30px;
    overflow: hidden;
    line-height: 30px;
    margin: 0 5px 0 0;
    font-size: 14px;
    text-align: center;
    border: 1px solid #00bc9b;
    color: #00bc9b;
    cursor: pointer;
}
.pagination li.current,
.pagination li:hover{
    background: #00bc9b;
    color: #ffffff;
}
.demo {
    margin: 10px 0;
    padding: 10px;
    background: #eeeeee;
    text-align: center;
}

JavaScript代码部分。


function pagination(total, current) {
        var ele=document.getElementById('jsPagination');
        //for demo1
        if(current-2>=1&¤t+2<=total)
        {
            var page=ele.firstChild.nextSibling;
            if(current-2==1)
                page.className='hide';
            for(var i=current-2,p=current-2;i<=current+2;p++,i++)
            {
                page=page.nextSibling;
                console.log(page);
                page=page.nextSibling;
                console.log(page);
                page.innerHTML=i;
                if(i==current)
                    page.className='current';
            }
            if(current+2==total)
            {
                var last=page.nextSibling.nextSibling;
                last.className='hide';
            }
        }
        //for demo2
        else if(total==0)
        {
            ele.className='pagination hide';
        }
        //for demo3
        else if(total<=5)
        {
            var fir=ele.firstChild.nextSibling;
            fir.className='hide';
            var page=fir;
            for(var i=1;i<=5;i++) {
                page = page.nextSibling.nextSibling;
                if (i <= total) {
                    page.innerHTML=i;
                    if(i==current)
                        page.className='current';
                }
                else
                {
                    page.className='hide';
                }
 
            }
            var last=page.nextSibling.nextSibling;
            last.className='hide';
        }
        //for demo4
        else if(current-2<=0)
        {
            var page=ele.firstChild.nextSibling;
            page.className='hide';
            for(var i=1;i<=5;i++) {
                page = page.nextSibling.nextSibling;
                page.innerHTML=i;
                    if(i==current)
                        page.className='current';
            }
 
        }
        //for demo5
        else if(current+2>total)
        {
            var page=ele.firstChild.nextSibling;
            for(var i=total-4;i<=total;i++) {
                page = page.nextSibling.nextSibling;
                page.innerHTML=i;
                if(i==current)
                    page.className='current';
            }
            var last=page.nextSibling.nextSibling;
            last.className='hide';
 
        }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章