使用JS手动实现SementicUI的分页,解决页数过多的问题.

news2025/1/9 0:34:39

自己使用SemanticUI官网的分页组件,
semanticUI的分页组件

但是有很多细节问题并没有解决方案,如果只是需要而分页,将页数渲染在分页组件上的话,那倒很简单,但是页面有很多的话,假如100页,那么整个tbody会随着tfoot的拉伸而变长;这里我想到的解决方案:总共只加载5个数字页,其他的页使用"…“,但是”…“的按钮不能被点击;而点击相应的页数,那么”…"的加载会有不同;那么会有三种的情况分别考虑
case1: curPage < 5 , 加载1-5 所有的页数
在这里插入图片描述

case2: curPage >=5 , 1、2页肯定会加载,再另外加载三页,当前页curPage始终在中间;
在这里插入图片描述

再仔细考虑,似乎点击的页数的不同而是否加载的"…“会有细微的区别:
当点击的是倒数第二页的时候,因为最后三页已经出现,不再拼接”…“;
当点击的是倒数第一页时,也是如此;
其它情况,最后则要拼接一个”…"

具体代码如下:
特别说明:
以下是我的表格的tfoot代码

 <tfoot>
                <tr>

                    <th colspan="6" class="mypage">
                        <!-- 分页 -->
                        <!--最大页数就是1既不显示上一页,也不显示下一页 -->
                        <!--<div class="ui left floated mini pagination menu" th:if="${visitorPage.totalPages}>1">
                                    &lt;!&ndash; <a class="icon item">
                                      <i class="left chevron icon"></i>
                                    </a> &ndash;&gt;
                                    <a class="item" th:href="@{/admin/visitorinfo(page=${visitorPage.number}-1)}" th:unless="${visitorPage.first}">上一页</a>

                                    <a class="mini item" th:href="@{/admin/visitorinfo(page=${visitorPage.number}+1)}" th:unless="${visitorPage.last}">下一页</a>

                                    <a class="mini item">总页数 : <span th:text="${visitorPage.totalPages}"></span> 页</a>

                                    <a class="mini item">总条数 : <span th:text="${visitorPage.totalElements}"></span> 条</a>
                                    &lt;!&ndash; <a class="item">3</a>
                                    <a class="item">4</a>
                                    <a class="icon item"> &ndash;&gt;
                                    &lt;!&ndash; <i class="right chevron icon"></i> &ndash;&gt;
                                    </a>
                              </div>-->
                    </th>
                </tr>
                </tfoot>

动态改变分页组件的函数,返回值为tfoot的html代码,最后只用拼接在上面代码的th标签里

 		let innerTagA = ``;

		//curpage 当前页数 从0开始 ,totalPages总页数,keyword关键词 ,sort 是否排序(按照自己的需求确定参数)
        function paginationFootHtml(curPage,totalPages,keyword,sort) {

        let i  = 1;

        // console.log("totalPage==>",totalPages);
        if (totalPages <=5) { //加载所有页没有省略

            for ( i; i<=totalPages; i++) {
                if (i === curPage) {
                    innerTagA+=
                        `<a class="item active" οnclick="queryPageByCondition('${i}','${keyword}','${sort}')">${i}</a>`;

                }else {
                    innerTagA+=
                        `<a class="item" οnclick="queryPageByCondition('${i}','${keyword}','${sort}')">${i}</a>`;

                }

            }


        }else if (totalPages > 5) {

            if (curPage<5){ //当前页是<=5 那么加载1-5 页码

                for (i; i <= 5; i++) {
                    if (i === curPage) {
                        innerTagA+=
                            `<a class="item active" οnclick="queryPageByCondition('${i}','${keyword}','${sort}')">${i}</a>`;

                    }else {
                        innerTagA+=
                            `<a class="item" οnclick="queryPageByCondition('${i}','${keyword}','${sort}')">${i}</a>`;

                    }
                };
                innerTagA+=`<a class="item">...</a>`;



            }else if (curPage>=5){  // 当前页大于5
                //始终显示 1、2页
                for (i; i <=2 ; i++) {
                    innerTagA+=
                        `<a class="item" οnclick="queryPageByCondition('${i}','${keyword}','${sort}')">${i}</a>`;
                }
                innerTagA+=`<a class="item" >...</a>`;

                //case1: 当前页数 + 1 = 总页数;当前页数在倒数第二个
                if (curPage + 1  === totalPages){

                    for (i= curPage-1 ; i <= totalPages ; i++) {

                        if (curPage===i){
                            innerTagA+=
                            `<a class="item active" οnclick="queryPageByCondition('${i}','${keyword}','${sort}')">${i}</a>`;
                        } else {
                            innerTagA+=
                            `<a class="item" οnclick="queryPageByCondition('${i}','${keyword}','${sort}')">${i}</a>`;
                        }


                    }


                //case2:  当前页数  = 总页数;当前页数在最后一个
                } else if (curPage === totalPages){

                    for (i= curPage-2; i <=totalPages; i++) {

                        if (curPage===i){
                            innerTagA+=
                            `<a class="item active" οnclick="queryPageByCondition('${i}','${keyword}','${sort}')">${i}</a>`;
                        } else {
                            innerTagA+=
                            `<a class="item" οnclick="queryPageByCondition('${i}','${keyword}','${sort}')">${i}</a>`;
                        }
                    }



                }else {
                    //case3: 其它情况;当前页数在中间
                    for (i = curPage - 1;i<=curPage+1;i++){
                        if (curPage===i){
                            innerTagA+=
                                `<a class="item active" οnclick="queryPageByCondition('${i}','${keyword}','${sort}')">${i}</a>`;
                        } else {
                            innerTagA+=
                                ` <a class="item" οnclick="queryPageByCondition('${i}','${keyword}','${sort}')">${i}</a>`;
                        }
                    }
                    innerTagA+=`<a class="item" >...</a>`;

                }



            }

        }
            let footHtml =
                `<div class="ui right floated pagination menu">
                            <a class="mini item preP" οnclick="queryPageByCondition('${curPage-1}','${keyword}','${sort}')">上一页</a>
                            ${innerTagA}
                            <a class="mini item nextP" οnclick="queryPageByCondition('${curPage+1}','${keyword}','${sort}')">下一页</a>
                        </div>`;

        return footHtml;
    }

总结:此分页组件还不够完善,当有具体需求的时候再实现即可,欢迎讨论~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/515296.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C# PDF附件生成

最近项目上需要生成行业某证件&#xff0c;查阅了一下&#xff0c;大体有两个思路可以实现 1.图片格式 2.PDF格式 使用图片格式&#xff0c;GDI绘图的形式&#xff0c;GDI绘图相关库资料比较多&#xff0c;难度也还好&#xff0c;问题是生成的证不是很好看&#xff0c;看上去…

ESP32学习笔记 -- ESP32-S3使用自定义分区表

什么是分区表? 分区表(Partition Table),主要是用来对ESP32-S3外挂的SPI FLASH进行区域划分的一个表格,通过这个表格,可以根据多个不同的功能,将SPI FLASH划分为不同的区域,方便开发者存储数据。 分区表主要有两种格式,一种是方便开发人员进行更改的.csv格式,一种是…

【Spring框架全系列】初识Spring MVC(上)

&#x1f303;哈喽&#xff0c;大家好&#xff0c;我是小浪。接着上篇博客&#xff0c;我们学习了springboot配置日志文件&#xff0c;到此&#xff0c;那么springboot的内容也更新的差不多了&#xff0c;由于是初学阶段&#xff0c;所以不学习那么深入&#xff0c;那么我们学习…

数据结构:单链表增、删、查、改的实现

1.概念 链表是一种 物理存储结构上非连续 、非顺序的存储结构&#xff0c;数据元素的 逻辑顺序 是通过链表 中的 指针链接 次序实现的 。 2.形式 我们使用链表一般都是创建一个结构体。 typedef int SLTDataType; typedef struct SListNode {SLTDataType data;struct SListN…

USB2.0 HUB的MTT与STT

HUB&#xff1a;集线器 以前呀&#xff0c;我也不清楚MTT与STT的区别&#xff0c;记得有一次选型的时候&#xff0c;很懵逼&#xff0c;结果还是按照以前同事的方案去选了&#xff0c;到后面想起来才抽空整明白了。 所以今天就来说下USB HUB里面的MTT与STT&#xff0c;并在文…

【GO】31. websocket实现

一. 引入gin、gorilla websocket包 go get github.com/gin-gonic/gin go get github.com/gorilla/websocket 二. 服务端代码 package mainimport ("bytes""fmt""github.com/gin-gonic/gin""github.com/gorilla/websocket""log&…

从字节出来的测试总监,让我们用这份《测试用例规范》,再也没加班过。

经常看到无论是刚入职场的新人&#xff0c;还是工作了一段时间的老人&#xff0c;都会对编写测试用例感到困扰&#xff1f;例如&#xff1a; 固然&#xff0c;编写一份好的测试用例需要&#xff1a;充分的需求分析能力 理论及经验加持&#xff0c;作为测试职场摸爬打滚的老人&…

RobotStudio教程:ABB机器人TCP路径轨迹跟踪功能介绍与使用方法

目录 功能介绍 机器人工作站创建 TCP路径轨迹全局跟踪 基于事件管理器的TCP路径轨迹局部跟踪 基于Smart组件的TCP路径轨迹局部跟踪 仿真运行 功能介绍 干涉检查是虚拟仿真工作中非常重要的一个步骤&#xff0c;尤其是机器人工具与工件、工装夹具之间的碰撞干涉&#xff…

Java高阶数据结构 图的最短路径问题

图的最短路径问题&#xff01; 文章目录 Java高阶数据结构 & 图的最短路径问题1. Dijkstra算法【单源最短路径】1.1 Dijkstra算法证明1.2 Dijkstra算法代码实现1.3 堆优化的Dijkstra算法1.4 堆优化Dijkstra算法代码实现 2. Bellman-Ford算法【单源最短路径】2.1 BF算法证明…

常见的基础模块电路,你都能看懂吗?

文章开始前&#xff0c;先来考考大家~ 下面的五副电路图&#xff0c;你能看懂几个&#xff1f; 目录 01.电源电路 02.运算放大器电路 03.信号产生电路 04.信号处理电路 05.传感器及其应用电路 06.显示电路 TDA2030电路图 34063电路图 555电路 TDA2030电路图 三极管分立元…

音视频八股文(11)-- ffmpeg 音频重采样

1重采样 1.1 什么是重采样 所谓的重采样&#xff0c;就是改变⾳频的采样率、sample format、声道数等参数&#xff0c;使之按照我们期望的参数输出。 1.2 为什么要重采样 为什么要重采样&#xff1f;当然是原有的⾳频参数不满⾜我们的需求&#xff0c;⽐如在FFmpeg解码⾳频…

从头开始学习Python接口自动化测试:编写测试用例,执行测试以及生成测试报告

Python接口自动化测试详解 随着Web服务和移动应用不断增多&#xff0c;以及对API和微服务的需求不断增加&#xff0c;API已成为现代应用程序中必不可少的组件。自动化测试框架可以大大简化API测试的过程&#xff0c;并确保其正确性和稳定性。Python是一种非常流行的编程语言&a…

洛谷B2100 同行列对角线的格

同行列对角线的格 题目描述 输入三个自然数 N N N&#xff0c; i i i&#xff0c; j j j&#xff08; 1 ≤ i ≤ n 1 \le i \le n 1≤i≤n&#xff0c; 1 ≤ j ≤ n 1 \le j \le n 1≤j≤n&#xff09;&#xff0c;输出在一个 N N N \times N NN 格的棋盘中&#xff08;行…

西门子1200PLC如何在威纶通HMI上进行时间显示

先生成定时器DB&#xff0c;然后在引脚绑定变量&#xff0c;在西门子PLC中&#xff0c;DINT和TIME之间可以隐含转化。 第一种方法&#xff1a;触摸屏元件设置成DINT类型 数值元件资料格式为32-bit Signed&#xff0c;对应PLC中即为DINT类型。小数点以下没有位数。这是我们测试…

Android RecyclerView实现侧滑删除,附 Demo

距上次写博客有半年多了&#xff0c;回忆起来都觉得不可思议&#xff0c;中间也想憋俩大招&#xff0c;总是被耽误&#xff0c;这俩月忙完之后&#xff0c;终于空下来了&#xff0c;恰好新项目我和UI俩人商量一下&#xff0c;用MD来实现app。中间有个需求是RecyclerView中侧滑显…

ch06-Pytorch的正则化与归一化

ch06-Pytorch的正则化与归一化 0.引言1.weight decay 和 dropout1.1.Regularization1.2.Dropout 2.Normalization2.1.Batch Normalization2.2.Batch Normalization in PyTorch2.2.1.nn.BatchNorm1d()2.2.2.nn.BatchNorm2d()2.2.3.nn.BatchNorm3d() 2.3.其他常见的Normalization…

java servlet jsp 农产品价格信息搜集系统 python开发mysql数据库web结构jsp编程计算机网页项目

一、源码特点 jsp 农产品价格信息搜集系统 python是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助 系统采用 serlvetdaobean 模式开发 利用python 进行网站爬取 &#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开…

Redis常见命令有哪些?怎么使用?

一、概述&#xff1a; 在了解Redis命令之前&#xff0c;我们要先了解Redis的数据结构&#xff0c;Redis是NoSQL数据库&#xff0c;采用了json存储模式&#xff0c;比MySQL等关系数据库更易于扩展&#xff0c;拥有丰富的数据类型&#xff0c;分基本类型与特殊类型。基本类型包括…

【Linux】网络---->套接字编程(TCP)

套接字编程TCP TCP的编程流程TCP的接口TCP的代码&#xff08;单线程、多进程、多线程代码&#xff09;单线程多进程多线程 TCP的编程流程 TCP的编程流程&#xff1a;大致可以分为五个过程&#xff0c;分别是准备过程、连接建立过程、获取新连接过程、消息收发过程和断开过程。 …

【youcans的深度学习 07】PyTorch入门教程:张量的基本操作 2

欢迎关注『youcans的深度学习』系列&#xff0c;持续更新中… 【youcans的深度学习 01】安装环境之 miniconda 【youcans的深度学习 02】PyTorch CPU版本安装与环境配置 【youcans的深度学习 03】PyTorch CPU版本安装与环境配置 【youcans的深度学习 04】PyTorch入门教程&#…