百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

jq+ajax+bootstrap改了一个动态分页的表格

zhezhongyun 2025-07-06 18:02 41 浏览

最近在维护一个很古老的项目,里面是用jq的dataTable方法实现一个分页的表格,不过这些表格的分页是本地分页。现在想要的是点击分页去请求数据。

经过多次的修改,以失败告终。分页的不准确,还会有这个错误:

Showing 0 to 0 of 0 entries (filtered from NaN total entries)

最终没有解决,我放弃了。

最终我选择自己写一个表格。本身项目的ui是基于bootstrap的。我就继续使用原有的插件。实现的效果如下:


整个分成三个部分:

1、顶部左侧页数选择框,右侧关键字搜索框;

2、中间的表格;

3、右下角分页。

首先得全局引入jq和bootstrap

<!-- jQuery 3 -->
<script src="/static/jquery/dist/jquery.min.js?v=c9f5aeeca3ad37bf2aa006139b935f0a"></script>
<!-- Bootstrap 3.3.7 -->
<script src="/static/bootstrap/dist/js/bootstrap.min.js?v=5869c96cc8f19086aee625d670d741f9"></script>

html书写

   <div class="box-body">
        <div id="staff_list" class="box-body" >
            <div style="text-align: right">
                <select id="select-staff_list" class="form-control" style="width:80px;height:30px;float:left">
                    <option value="10">10</option>
                    <option value="20">20</option>
                    <option value="30">30</option>
                    <option value="50">50</option>
                </select>
                Search:  <input id="staff_list_search" class="form-control" style="width:200px;height:30px;display: inline-block"/><br /><br />
            </div>
            <div id="staff_list_table" style="width: 100%; word-break: break-all; overflow-wrap: break-word;">

            </div>
        </div>
    </div>

jq实现

  // 分页的页码不好获取,在全局声明,操作后更新页码;
let gloabalPage=0;

    function tableReload(page,size,keyword){
        $.ajax({
            type: "get",
            url: "/api/global/access/list?pages="+page+"&page_size="+size+"&keyword="+keyword, 
            success: function (res) {
                const {data:{recordsTotal,data},success}=res;
                // 计算页数
                const pagesTotal=Math.ceil(recordsTotal/size);
                if(recordsTotal===0){
                  // 没有数据清除表格
                    $("#staff_list_table").html("<span>暂无数据</span>");
                    return "";
                }
                let arr=[];
                while(arr.length<pagesTotal){
                    arr.push(arr.length+1)
                }
              // 通过字符串拼接方式写表格
              // 需要判断前一页和后一页什么时候不能点击
              
                if (success == true) {
                    if(data){
                        var str=`
                            <table id="table-list" class="table table-sm table-hover table-bordered table-striped" >
                            <tr>
                            <th>ID</th>
                            <th>限制关键字</th>
                            <th>限制键值</th>
                            <th>关键字匹配方式</th>
                            <th style="width:140px;">操作</th>
                            </tr>
                            <tbody id="tbody-list" class="tbody-list-kcsinstance">
                            ${data.map(function(item){
                                return `
                                <tr>
                                  <td>${item.id}</td>
                                  <td>${item.key}</td>
                                  <td>${item.value}</td>
                                  <td>${item.match_type===0?"完全匹配":"CIDR网段匹配"}</td>
                                  <td>
                                    <div class="btn-group" role="group">
                                      <button type="button" class="btn btn-box-tool dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                                      <i class="fa fa-trash"></i> 删除限制单元
                                      <span class="caret"></span>
                                      </button>
                                      <ul class="dropdown-menu" >
                                        <li onclick="delLimit(${item.id})" ><a>确认</a></li>
                                        <li><a>取消</a></li>
                                      </ul>
                                    </div>
                                  </td>
                                </tr>`
                             }).join('')}
                          </tbody>
                         </table>
                        <nav aria-label="Page navigation" style="float:right">
                            <ul class="pagination" size="mini">
                            ${page===0?`<li class="disabled">`:`<li>`}  
                              <a aria-label="Previous">
                               <span aria-hidden="true"><<</span>
                              </a>
                              </li>
                            ${arr.map(function(arritem){
                                   if(arritem==page+1){ return `<li class="active"><a >${arritem}</a></li>`}
                                  return `<li><a >${arritem}</a></li>`
                                 }).join('')}
                             ${page===pagesTotal-1?`<li class="disabled">`:`<li>`}
                                   <a  aria-label="Next">
                                      <span aria-hidden="true">>></span>
                                   </a>
                                 </li>
                               </ul>
                            </nav>
                        `;

                        $("#staff_list_table").html(str);
                      // 页码添加点击事件,判断是点击在页码上还是前一页或者后一页。
                        $('.pagination li').on('click',function () {
                            const contentVal=$(this).html();
                            const size=$("#select-staff_list").val();
                            const word=$("#staff_list_search").val();
                            const page=contentVal.match(/\d+(.\d+)?/g);
                            if(page){
                              // 点击页码数
                                gloabalPage=page[0]-1;
                                tableReload(page[0]-1,size,word);
                                $('.pagination li').removeClass('active');
                                $(this).addClass('active');
                            }else if(contentVal.indexOf("Previous")>-1&&gloabalPage>0){
                              // 点击 前一页, 并且当前页数大于1才能进行请求
                                tableReload(gloabalPage-1,size,word);
                                gloabalPage=gloabalPage-1;
                            }else if(contentVal.indexOf("Next")>-1&&gloabalPage<pagesTotal-1){
                                // 点击 后一页, 并且当前页数小于总页数才能进行请求
                              tableReload(gloabalPage+1,size,word);
                                gloabalPage=gloabalPage+1;
                            }
                        });
                    }else {
                        $("#staff_list").html("<span>暂无数据</span>");
                    }
                } else {
                    alert("请求失败!\n" + res.msg);
                }
            },
            error: function () {
                alert("Error");
            }
        })
    };

 
   // 页数选择框发生改变时候的操作
    $('#select-staff_list').on('change',function (c) {
        gloabalPage=0;
        const word=$("#staff_list_search").val();
        tableReload(0,c.target.value,word);
    });

// 搜索框发生改变时候的操作
    $('#staff_list_search').on("input propertychange",function (c) {
        gloabalPage=0;
        const page=$("#select-staff_list").val();
        tableReload(0,page,c.target.value);
    });

// 首次加载
$(document).ready(function() {
    tableReload(0,10,"");
})

作者:前端小陈

转载请注明出处,谢谢!

相关推荐

Python入门学习记录之一:变量_python怎么用变量

写这个,主要是对自己学习python知识的一个总结,也是加深自己的印象。变量(英文:variable),也叫标识符。在python中,变量的命名规则有以下三点:>变量名只能包含字母、数字和下划线...

python变量命名规则——来自小白的总结

python是一个动态编译类编程语言,所以程序在运行前不需要如C语言的先行编译动作,因此也只有在程序运行过程中才能发现程序的问题。基于此,python的变量就有一定的命名规范。python作为当前热门...

Python入门学习教程:第 2 章 变量与数据类型

2.1什么是变量?在编程中,变量就像一个存放数据的容器,它可以存储各种信息,并且这些信息可以被读取和修改。想象一下,变量就如同我们生活中的盒子,你可以把东西放进去,也可以随时拿出来看看,甚至可以换成...

绘制学术论文中的“三线表”具体指导

在科研过程中,大家用到最多的可能就是“三线表”。“三线表”,一般主要由三条横线构成,当然在变量名栏里也可以拆分单元格,出现更多的线。更重要的是,“三线表”也是一种数据记录规范,以“三线表”形式记录的数...

Python基础语法知识--变量和数据类型

学习Python中的变量和数据类型至关重要,因为它们构成了Python编程的基石。以下是帮助您了解Python中的变量和数据类型的分步指南:1.变量:变量在Python中用于存储数据值。它们充...

一文搞懂 Python 中的所有标点符号

反引号`无任何作用。传说Python3中它被移除是因为和单引号字符'太相似。波浪号~(按位取反符号)~被称为取反或补码运算符。它放在我们想要取反的对象前面。如果放在一个整数n...

Python变量类型和运算符_python中变量的含义

别再被小名词坑哭了:Python新手常犯的那些隐蔽错误,我用同事的真实bug拆给你看我记得有一次和同事张姐一起追查一个看似随机崩溃的脚本,最后发现罪魁祸首竟然是她把变量命名成了list。说实话...

从零开始:深入剖析 Spring Boot3 中配置文件的加载顺序

在当今的互联网软件开发领域,SpringBoot无疑是最为热门和广泛应用的框架之一。它以其强大的功能、便捷的开发体验,极大地提升了开发效率,成为众多开发者构建Web应用程序的首选。而在Spr...

Python中下划线 ‘_’ 的用法,你知道几种

Python中下划线()是一个有特殊含义和用途的符号,它可以用来表示以下几种情况:1在解释器中,下划线(_)表示上一个表达式的值,可以用来进行快速计算或测试。例如:>>>2+...

解锁Shell编程:变量_shell $变量

引言:开启Shell编程大门Shell作为用户与Linux内核之间的桥梁,为我们提供了强大的命令行交互方式。它不仅能执行简单的文件操作、进程管理,还能通过编写脚本实现复杂的自动化任务。无论是...

一文学会Python的变量命名规则!_python的变量命名有哪些要求

目录1.变量的命名原则3.内置函数尽量不要做变量4.删除变量和垃圾回收机制5.结语1.变量的命名原则①由英文字母、_(下划线)、或中文开头②变量名称只能由英文字母、数字、下画线或中文字所组成。③英文字...

更可靠的Rust-语法篇-区分语句/表达式,略览if/loop/while/for

src/main.rs://函数定义fnadd(a:i32,b:i32)->i32{a+b//末尾表达式}fnmain(){leta:i3...

C++第五课:变量的命名规则_c++中变量的命名规则

变量的命名不是想怎么起就怎么起的,而是有一套固定的规则的。具体规则:1.名字要合法:变量名必须是由字母、数字或下划线组成。例如:a,a1,a_1。2.开头不能是数字。例如:可以a1,但不能起1a。3....

Rust编程-核心篇-不安全编程_rust安全性

Unsafe的必要性Rust的所有权系统和类型系统为我们提供了强大的安全保障,但在某些情况下,我们需要突破这些限制来:与C代码交互实现底层系统编程优化性能关键代码实现某些编译器无法验证的安全操作Rus...

探秘 Python 内存管理:背后的神奇机制

在编程的世界里,内存管理就如同幕后的精密操控者,确保程序的高效运行。Python作为一种广泛使用的编程语言,其内存管理机制既巧妙又复杂,为开发者们提供了便利的同时,也展现了强大的底层控制能力。一、P...