如何让HTML5的表格支持后台排序与分页

TWaver HTML5发布已有一段时间,使用的客户也是逐渐增加,于是我也迫不及待地申请了一个试用版来写一个小网页,最近正在写到数据查询,表格显示的功能。表格组件在HTML5中是提供的,查看TWaver提供的Demo,表格的使用还是比较多的,于是参考了其中的一个Demo,新建一个表格,并给表格赋值。很快一张表格就生成了。



但是想想,如果数据库中有几千甚至几万条数据,一下子显示出来也是不现实的,立马就想要了分页。查看TWaver的API,并没有发现表格中提供了分页的功能。算了,还是自己来扩展,想想TWaver Java中分页的功能,HTML5实现起来应该也不算太难,我们需要定义一个PagedTablePane,panel中包含表格和分页栏,分页栏参考了TWaver Java的那种:



仔细看看上面的分页条,其实也不是那么复杂,几个分页按钮加上分页的信息,于是很快就模仿了一个类似的分页栏,先上图:


界面实现起来还是比较容易的,主要的是按钮的操作和分页信息的显示,我们需要定义几个变量:currentPage(当前页)、countPerPage(每页的条数)、pageCount(页数)、count(总数),定义了这几个变量就可以将上图中分页的信息表示出来了。

另外需要注意,分页按钮上也需要做一些判断,比如当前已经是第一页了,那么“首页”和“上一页”的按钮就应该显示灰色,不可操作的状态;同理如果当前是最后一页,那么后面两个按钮也需要呈不可操作状态,我们来看下相关代码:

if(this.pageCount < 2) {
            this.btnFirstPage.disabled = true;
            this.btnPreviousPage.disabled = true;
            this.btnNextPage.disabled = true;
            this.btnLastPage.disabled = true;
        } else {
            this.btnFirstPage.disabled = false;
            this.btnPreviousPage.disabled = false;
            this.btnNextPage.disabled = false;
            this.btnLastPage.disabled = false;
            if(this.currentPage == 0) {
                this.btnFirstPage.disabled = true;
                this.btnPreviousPage.disabled = true;
            }
            if(this.currentPage == this.pageCount - 1) {
                this.btnNextPage.disabled = true;
                this.btnLastPage.disabled = true;
            }
        }

按钮除了需要判断显示状态之外,还需要加鼠标点击的监听,这里我们需要后台分页,因此,每次点击按钮时,都需要调用后台的方法查询出相应的数据,这样也可以减少前台一次加载大量数据的压力。

this.btnFirstPage = util.addButton(toolbar, '<<', function () {
        self.currentPage = 0;
        self.search();
    });
    this.btnPreviousPage = util.addButton(toolbar, '<', function () {
        self.currentPage --;
        self.search();
    });
    this.btnNextPage = util.addButton(toolbar, '>', function () {
        self.currentPage ++;
        self.search();
    });
    this.btnLastPage = util.addButton(toolbar, '>>', function () {
        self.currentPage = self.pageCount -1;
        self.search();
    });

另外下拉条也需要加交互事件:

cmbCountPerPage.onchange = function () {
        var value = parseFloat(cmbCountPerPage.value);
        self.countPerPage = value;
        self.search();
    };


上面代码中的search都是调用后台的方法,这里就不再给出了。至此,分页的功能就差不多了,加上分页后的效果:

 

细心的朋友还会看到上面的表头上有些列是可点的,有些是不可点击的。我在这里加上了后台排序的功能,如果这一列可以排序就为可点击状态,反之则为不可点击状态。

HTML5中的表格默认是可以进行排序的,不过这种排序也是在当前页进行排序,还不是真正意义上的后台排序,其实分页后也只有当前页的数据在databox中,后面页的数据都需要通过实时查找才能获取放置到databox中。因此点击排序按钮时我们需要将TWaver默认的处理方式给屏蔽掉,加上自己的处理就可以了,具体实现如下:

先重写table上的getCurrentSortFunction:

 

getCurrentSortFunction: function () {
        return this.getSortFunction();
    }

 

然后在onColumnSorted方法中进行自己的业务处理:

this.table.onColumnSorted = function (column) {
  self.currentPage = 0;
  if (column) {
     self.dataPane._sortBy = column.getClient('sortProperty');
     self.dataPane._orderAsc = column.getSortDirection() === 'asc';
  } else {
     self.dataPane._sortBy = null;
  }
  self.search();
 };

这里的sortBy和orderAsc是自己定义的两个变量,在search方法中会调用此变量,将其传入后台进行排序。最后,给出完整的PagedTablePane供大家参考:

 

var PagedTablePane = function (dataPane) {
    PagedTablePane.superClass.constructor.call(this);
    this.dataPane = dataPane;
    var toolbar = document.createElement('div');
    this.setCenter(new twaver.controls.TablePane(dataPane.table));
    this.setTop(toolbar);
    this.setTopHeight(25);
    this.countPerPage = 20;
    var self = this;
    var isStorageSupport = typeof(Storage) !== "undefined";
 if(isStorageSupport) {
        var storageName = dataPane.getPageNumberStorageName();
        if(localStorage.getItem(storageName)){
            self.countPerPage = parseFloat(localStorage.getItem(storageName));
        }
 }
    var cmbCountPerPage = document.createElement('select');
    var items = ['20', '50', '100', '500', '1000'];
    for(var i=0,item; i<items.length; i++) {
        item = items[i];
        var option = document.createElement('option');
        option.appendChild(document.createTextNode(item));
        option.setAttribute('value', item);
        cmbCountPerPage.appendChild(option);
    }
    cmbCountPerPage.onchange = function () {
        var value = parseFloat(cmbCountPerPage.value);
        self.countPerPage = value;
        if(isStorageSupport) {
            var storageName = dataPane.getPageNumberStorageName();
            localStorage.setItem(storageName,value);
        }
        self.search();
    };
    cmbCountPerPage.value = this.countPerPage;
    toolbar.appendChild(cmbCountPerPage);
   
    this.btnFirstPage = util.addButton(toolbar, '<<', function () {
        self.currentPage = 0;
        self.search();
    });
    this.btnPreviousPage = util.addButton(toolbar, '<', function () {
        self.currentPage --;
        self.search();
    });
    this.btnNextPage = util.addButton(toolbar, '>', function () {
        self.currentPage ++;
        self.search();
    });
    this.btnLastPage = util.addButton(toolbar, '>>', function () {
        self.currentPage = self.pageCount -1;
        self.search();
    });
    this.label = document.createElement('label');
    toolbar.appendChild(this.label);
   
    this.table = dataPane.table;
    this.currentPage = 0;
   
    this.table.onColumnSorted = function (column) {
  self.currentPage = 0;
  if (column) {
     self.dataPane._sortBy = column.getClient('sortProperty');
     self.dataPane._orderAsc = column.getSortDirection() === 'asc';
  } else {
     self.dataPane._sortBy = null;
  }
  self.search();
 };
};

twaver.Util.ext('PagedTablePane', twaver.controls.BorderPane, {
    search: function () {
       util.invoke(this, this.handleSearch, {
             moduleName:this.dataPane._moduleName,
             method: util.getCountMethod(this.dataPane._method),
             params: this.dataPane.getParams(),
             paramTypes:this.dataPane._paramType
        });
    },
    handleSearch: function (count) {
        this.jsonObject = JSON.parse(count);
        this.count = this.jsonObject[0];
        this.pageCount = Math.floor(this.count/this.countPerPage);
        if(this.count % this.countPerPage) {
            this.pageCount ++;
        }
        if(this.currentPage >= this.pageCount) {
            this.currentPage = this.pageCount -1;
        }
        this.label.innerHTML = jQuery.i18n.prop('paged.page',this.count,this.currentPage + 1,this.pageCount);
        if(this.pageCount < 2) {
            this.btnFirstPage.disabled = true;
            this.btnPreviousPage.disabled = true;
            this.btnNextPage.disabled = true;
            this.btnLastPage.disabled = true;
        } else {
            this.btnFirstPage.disabled = false;
            this.btnPreviousPage.disabled = false;
            this.btnNextPage.disabled = false;
            this.btnLastPage.disabled = false;
            if(this.currentPage == 0) {
                this.btnFirstPage.disabled = true;
                this.btnPreviousPage.disabled = true;
            }
            if(this.currentPage == this.pageCount - 1) {
                this.btnNextPage.disabled = true;
                this.btnLastPage.disabled = true;
            }
        }
        this.dataPane.initData();
    }
});
 
Javascript分页效果(收集了很多强大的JS分页代码) Javascript我v页效果(收集了很多强大的JS分页代码),可以直接使用,不会JS的也能在自己网站上应用到强大的JS分页特效 立即下载

相关推荐

html前端动态获取后端数据显示到表格,实现分页显示

html前端获取后端js的数据,实现到html表格,并且实现表格分页显示,分页显示原理是要显示那一页数据就从后端获取需要显示页的数据,不会一次性获取全部数据,减小流前端的压力。后端使用js+express,读取csv文件存储到内存,前端需要那一段的数据,后端就给前端那一页的数据。非常适合前端新手。同时分为两个文件serverImage和clientImage,其中包含项目源码,一些配置文件,以及后端需要处理的两个csv文件,同时包含生成docker镜像的Dockerfile,可直接在serverImage和clientImage目录先直接build客户端镜像和服务端镜像。

原生 javascript jquery 快速实现后台 分页表格页面

目录 参考文章 介绍 html代码 代码介绍 回调ajax 代码介绍 分页js 代码介绍 css 代码介绍 调用js 代码介绍 效果 页面样式介绍 参考文章 上篇文章javascript jquery html5 实现快速 后台管理页面 模块名称 查询 表格展示 分页 实现 可方便嵌入系统 批量替换td内容 https://yushen.blog.youkuaiyun.com/article/details/111150820 介绍 1.使用页面 2.加载分页js 3...

银河系天城知识宝库_技术专家蒋浩宇 895

SCCM部署教程:(3)SCCM安装

这两则摘要介绍了WSUS和SCCM的安装步骤: WSUS安装:通过服务器管理器添加"Windows服务器更新服务"角色,选择SQL数据库并指定安装路径,验证数据库连接后完成安装。 SCCM安装:先运行预检工具Prereqchk.exe,选择主站点安装类型,配置语言、站点代码和名称,设置SQL数据库连接参数(保留默认端口4022),选择通信方法和系统角色(管理点和分发点),最后完成约1小时的安装过程。 两则安装指南都强调要确保数据库配置与前期准备一致,并提供了关键配置选项的说明。

小V锅的专栏 902

前端实现表格分页,排序,全局模糊搜索

html <table id="odpsColumnsDetails" class="table table-bordered "> </table> js部分 重点在 DataTable,这个是jquery.dataTables.min.js 中的,所以要引入这个js 可以参考:https://datatables.net/examples/data_sources/js_array.html 官方最靠谱 $('#odpsColumnsDetails').Dat..

qq_34864753的博客 1277

2026马斯克《Moonshots》播客独家访谈全记录与深度解析

本次访谈是马斯克2026年首份重磅公开对话,录制于2025年12月22日美国得克萨斯州奥斯汀特斯拉超级工厂(Cybertruck与Optimus机器人核心生产基地),于2026年1月6日通过《Moonshots》播客正式上线,全时长近3小时。

lpfasd123的博客 2653

使用再生龙备份还原liunx系统(精确每一步)

再生龙镜像可自行到官网下载(ISO/ZIP格式均可),然后使用tuxboot烧录工具制作启动盘,另外准备一个U盘用来存储备份的镜像文件,即再生龙盘和存储盘是两个分开的。当然也可以用分区工具把同一个硬盘分区来使用,比较方便,先学会基本的吧,只是告诉有个捷径,省个U盘。

米可的博客! 8365

html5怎么给表格设置分页,如何让HTML5的表格支持后台排序与分页

TWaver HTML5发布已有一段时间,使用的客户也是逐渐增加,于是我也迫不及待地申请了一个试用版来写一个小网页,最近正在写到数据查询,表格显示的功能。表格组件在HTML5中是提供的,查看TWaver提供的Demo,表格的使用还是比较多的,于是参考了其中的一个Demo,新建一个表格,并给表格赋值。很快一张表格就生成了。 但是想想,如果数据库中有几千甚至几万条数据,一下子显示出来也是不现实的,立马...

weixin_35011300的博客 1049

手把手教你学Simulink--电机电磁兼容与可靠性​场景示例:基于Simulink的电机轴电压与轴电流抑制仿真

本文带你完成了电机轴电压与轴电流抑制的Simulink仿真,实现了:✅ 揭示了共模电压 → 寄生电容 → 轴电压 → 轴承电蚀的完整链路✅ 搭建了含寄生参数的高频电机等效模型共模电压最小化PWM(源头抑制)dv/dt滤波器(路径阻断)轴接地(终端泄放) ✅ 通过仿真验证了轴电压从68 V降至<3 V的显著效果 ✅ 为高可靠性电机系统提供低成本、高效益的轴承保护方案。

MHD0815的博客 315

html 分页显示日志,如何让HTML5的表格支持后台排序与分页

TWaver HTML5发布已有一段时间,使用的客户也是逐渐增加,于是我也迫不及待地申请了一个试用版来写一个小网页,最近正在写到数据查询,表格显示的功能。表格组件在HTML5中是提供的,查看TWaver提供的Demo,表格的使用还是比较多的,于是参考了其中的一个Demo,新建一个表格,并给表格赋值。很快一张表格就生成了。 但是想想,如果数据库中有几千甚至几万条数据,一下子显示出来也是不现实的,立马...

weixin_42510271的博客 187

LDRA Testbed软件静态分析_常见问题及处理

通过前面的几篇文章,LDRA Testbed软件静态分析的内容基本讲解完了,本篇文章将针对使用Testbed进行软件静态分析的常见问题进行介绍。 到此为止,LDRA Testbed软件静态分析的内容已经全部讲完,如果有问题,欢迎私信提问(不经常登录,回复可能不及时,见谅)。下一篇文章将开始讲解如何使用Testbed进行单元测试。

文章主要涉及嵌入式软件开发、测试、项目管理等,欢迎交流,共同进步。 2585

3.嵌入式控制器EC学习,源码框架(60/64端口)(一)

服务函数剖析 上一篇讲到while循环会一直查询十六个标志位是否满足要求,一旦其中某个标志位为1时,程序将会执行相应的服务函数,而执行服务函数是通过函数指针(service_table[ _R1 ])();来实现的。接下来我们分别来看看这十六个服务函数分别包含了哪些内容。 16个函数的函数名如下: const FUNCT_PTR_V_V code service_table[16] = { // Hi-Level Service Service_PCI, // Host 6

qq_30135687的博客 4160

Django表格革命:django-tables2的智能化数据展示解决方案

在当今数据驱动的Web开发时代,高效展示结构化数据已成为每个Django开发者必须面对的挑战。**django-tables2**作为一款专为Django设计的HTML表格生成库,通过革命性的设计理念,彻底改变了传统表格开发的复杂流程。这个智能化的Django表格解决方案不仅简化了数据展示,更提供了完整的排序、分页和自定义功能,让开发者能够专注于业务逻辑而非界面实现。 ## 🚀 项目革命性价值

gitblog_00063的博客 341

【无人机项目实战】第三章:fast_planner工程解读(附C++代码)

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言一、规划系统运行逻辑【业务部分】1.Fast_planner_node.cpp【程序入口】功能代码实现2.kino_replan_fsm.cpp【状态机转移】功能代码实现KinoReplanFSM::init()函数订阅目标点回调函数订阅里程计回调函数检查路径规划是否成功【重要】执行状态机FSM定时器回调函数【重要】判断目标点是否有障碍物或者是轨迹执行过程中是否有障碍物的回调函数3

qq_35635374的博客 1万+

DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)示例2: 分页和排序

DeepSeek 日活跃用户数突破 3000 万大关,成为史上最快达成这一里程碑的应用,展现了强大的市场吸引力。2 月 2 日,DeepSeek 攀升至 140 个国家的苹果 App Store 下载排行榜首位,并在美国的 Android Play Store 中同样占据榜首位置,进一步巩固了在全球市场的领先地位。

宝码香车的博客 1616

OpenClaw Windows 安装指南

好的,我来一步一步带你在 Windows 上安装 OpenClaw。

m0_60605453的博客 549

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

html表格里面下拉分页,可以排序的table表格并有分页功能

这JS代码可以实现table表格的排序,并且具有表格分页功能、当前列高亮显示、 实现表格奇偶行不同颜色、兼容性: 火狐, IE 6/7/8, Opera, Safari and Chrome。1. 实现表格的列排序功能(点击表头,切换该列升降序),也可以指定哪一列不排序;2. 实现当前列高亮显示;3. 实现表格奇偶行不同颜色,即换行变色;4. 实现表格分页功能,可指定是否开启分页功能及每页行数;5...

weixin_39757212的博客 713

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

ajax json 表格排序,分页,自定义每页数量

ajax json 表格排序,分页,自定义每页数量 点击表头可以排序,按照升序或者降序,另外支持多列排序设置每页数量演示 XML/HTML Codetable id='example3'>    thead>  tr>   th>IDth>   th>First nameth>   th>Last nameth>   th>Gradeth>   th>Grade 2th>   th>Efficie

管子(zero)的杂乱空间 6402

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

vue实现表格组件,带分页

<html> <head> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <script src="http://code.jquery.com/jquery-1.4.1.min.js"></script> <style> table { width: 100%; .

qq_41633199的博客 2110

可复用表格组件设计与实现:分页、排序、筛选全功能解析

可复用表格组件设计与实现:分页、排序、筛选全功能解析

嗨,欢迎来到我的 优快云 博客小天地!一名深耕多年的技术发烧友。在这里,我将把日常工作中积累的宝贵经验,从复杂架构设计的精妙之处,到代码优化的实战技巧,毫无保留地分享给大家。 682

使用插件bootstrap-table实现表格记录的查询、分页、排序等处理

在业务系统开发中,对表格记录的查询、分页、排序等处理是非常常见的,在Web开发中,可以采用很多功能强大的插件来满足要求,且能极大的提高开发效率,本随笔介绍这个bootstrap-table是一款非常有名的开源表格插件,在很多项目中广泛的应用。Bootstrap-table插件提供了非常丰富的属性设置,可以实现查询、分页、排序、复选框、设置显示列、Card view视图、主从表显示、合并列、国际化处理等处理功能,而且该插件同时也提供了一些不错的扩展功能,如移动行、移动列位置等一些特殊的功能,插件可以用基于HT

xiaosachuchen的专栏 1074

ajax json 表格排序,分页,自己定义每页数量

ajax json 表格排序。分页,自己定义每页数量点击表头能够排序。依照升序或者降序,另外支持多列排序设置每页数量演示XML/HTML Code<tableid='example3'><thead><tr><th>ID</th&g...

weixin_30887919的博客 108

终极指南:用tablecloth.js在5分钟内彻底美化你的HTML表格

你是否曾为HTML表格的单调外观而苦恼?那些灰暗的边框、拥挤的布局和缺乏交互性的设计,让你的数据展示显得乏味而低效。现在,**tablecloth.js** 这个强大的jQuery插件将彻底改变这一现状,让你在短短几分钟内就能拥有专业级的表格设计。 ## 为什么你的网站需要tablecloth.js? 想象一下,你正在开发一个数据密集型应用——可能是电商后台、财务系统或内容管理平台。数据显示的

gitblog_01025的博客 554
上一篇: 自定义Background
下一篇: 如何在TWaver Flex中定制Tree的tooltip
subnetwork
博客等级 码龄17年 17粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值