纯JS前端分页方法(JS分页)
1、JS分页函数:开发过程中,分页功能一般是后台提供接口,前端只要传page(当前页码)和pageSize(每页最大显示条数)及对应的其他查询条件,就可以返回所需分页显示的数据。
但是有时也需要前端本地进行一些简单的分页处理以减轻浏览器渲染时的内存损耗。如后台传回的数据条数非常多,达到几千条甚至上万条,但是后台又不方便分页传回数据,这个时候就只能前端先获取所有数据保存下来,然后前端本地进行分页并渲染显示。
2、只需要一个纯原生的js函数就可以实现前端的分页功能,直接上js代码:
/**
* @name getTableData
* @desc 纯JS前端分页方法
* @param {Number} page 当前页码,默认1
* @param {Number} pageSize 每页最多显示条数,默认10
* @param {Array} totalData 总的数据集,默认为空数组
* @return {Object} {
data, //当前页展示数据,数组
page, //当前页码
pageSize, //每页最多显示条数
length, //总的数据条数
}
**/
const getTableData = (page = 1, pageSize = 10, totalData = []) => {
const { length } = totalData;
const tableData = {
data: [],
page,
pageSize,
length,
};
if (pageSize >= length) { //pageSize大于等于总数据长度,说明只有1页数据或没有数据
tableData.data = totalData;
tableData.page = 1;//直接取第一页
} else { //pageSize小于总数据长度,数据多余1页
const num = pageSize * (page - 1);//计算当前页(不含)之前的所有数据总条数
if (num < length) { //如果当前页之前所有数据总条数小于(不能等于)总的数据集长度,则说明当前页码没有超出最大页码
const startIndex = num;//当前页第一条数据在总数据集中的索引
const endIndex = num + pageSize - 1;//当前页最后一条数据索引
tableData.data = totalData.filter((_, index) => index >= startIndex && index <= endIndex);//当前页数据条数小于每页最大条数时,也按最大条数范围筛取数据
} else { //当前页码超出最大页码,则计算实际最后一页的page,自动返回最后一页数据
const size = parseInt(length / pageSize); //取商
const rest = length % pageSize; //取余数
if (rest > 0) { //余数大于0,说明实际最后一页数据不足pageSize,应该取size+1为最后一条的页码
tableData.page = size + 1;//当前页码重置,取size+1
tableData.data = totalData.filter((_, index) => index >= (pageSize * size) && index <= length);
} else if (rest === 0) { //余数等于0,最后一页数据条数正好是pageSize
tableData.page = size;//当前页码重置,取size
tableData.data = totalData.filter((_, index) => index >= (pageSize * (size - 1)) && index <= length);
} //注:余数不可能小于0
}
}
return tableData;
};
只需要传入对应参数就可以返回带有对应分页属性的对象,用于前端界面展示。
如有问题欢迎留言讨论。
原创博客禁止抄袭,转载请注明出处:原文地址:https://www.cnblogs.com/xiao-pengyou/
纯JS前端分页方法(JS分页)的更多相关文章
- 【QRcode二维码】:使用JS前端插件QRcode.js生成二维码
1.先简单说一下jquery-qrcode,这个开源的三方库(可以从https://github.com/jeromeetienne/jquery-qrcode 获取), qrcode.js 是实现二 ...
- js前端数据验证JS工具
var regexEnum = { intege : "^-?[1-9]\\d*$", // 整数 intege1 : "^[1-9]\\d*$", // 正整 ...
- Html辅助方法(分页、下拉框)
引用命名空间: using System.Text; using System.Web.Mvc; Html分页方法 #region 分页Html辅助方法 /// <summary> /// ...
- .net分页方法
.net分页方法 //记录分页的总条数 DX.Model.Container.PagerDataContainer Container = new DX.Model.Container.PagerDa ...
- js前端分页之jQuery
锋利的js前端分页之jQuery 大家在作分页时,多数是在后台返回一个导航条的html字符串,其实在前端用js也很好实现. 调用pager方法,输入参数,会返回一个导航条的html字符串.方法的内部比 ...
- js 前端操作的分页路由设计
//分页条获得分页数字,然后跳转到拼接字符串的页面 function getPage(page) { var window_href = location.pathname; var newWindo ...
- 纯Jquery前端分页
---恢复内容开始--- 由于之前自己做过jquery分页,就是调用jni接口时,只能用前台分页解决显示问题.最近看到有人提这样的问题:一个请求传过来上万个数据怎么办?于是萌生了写这篇博客的想法. 效 ...
- ThinkPHP AJAX分页及JS缓存的应用
//AJAX分页详见兄弟连PHP项目视频教程22讲35分钟左右 主要实现是需要将分页中的每个链接都改为AJAX请求 //前端缓存技术:基于javascript传输的数据,只要浏览器没关,都保存在内存中 ...
- 前端Js跨域方法汇总—剪不断,理还乱,是跨域
1.通过jsonp跨域2.通过修改document.domain来跨子域(iframe)3.隐藏的iframe+window.name跨域4.iframe+跨文档消息传递(XDM)5.跨域资源共享 C ...
随机推荐
- arcgis图层控制
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...
- qt获取本机用户名
//获取用户名 QString getUserName() { #if 1 QStringList envVariables; envVariables << "USERNAME ...
- JavaScript--返回顶部方法:锚链接、行内式js写法、外链式、内嵌式
返回网页顶部方法 一.锚链接 simpleDemo: <!DOCTYPE html> <html lang="en"> <head> <m ...
- LintCode刷题笔记-- Count1 binary
标签: 位运算 描述: Count how many 1 in binary representation of a 32-bit integer. 解题思路: 统计一个int型的数的二进制表现形式中 ...
- Directx教程(28) 简单的光照模型(7)
原文:Directx教程(28) 简单的光照模型(7) 现实生活中的点光源都是随着距离衰减的,比如一个电灯泡在近处会照的很亮,远处光线就很弱.本节中我们在前面光公式的基础上,再给漫反射和 ...
- day39-Spring 05-Spring的AOP:不带有切点的切面
Spring底层的代理的实现: 不带切点的切面是对类里面的所有的方法都进行拦截. 做Spring AOP的开发需要两个包:一个是AOP的包,一个是AOP联盟的包(因为规范是由AOP联盟提出来的). 用 ...
- Hdu 4810
2014-05-02 15:53:50 题目连接 2013年南京现场赛的题目,现场的时候,排在我们前面的队伍基本都过了这题,我们后面的队伍也有不少过了这题,唯独我们没有.. 后来是Qingyu Sha ...
- HTML5八大特性助力移动WebApp开发
http://www.cocoachina.com/webapp/20150906/13344.html WebApp的实现基础就是HMTL5+JS+CSS3,但是WebApp还是基于浏览器的微网站开 ...
- ef core 随记
EntityTypeConfiguration internal class OrderEntityTypeConfiguration : IEntityTypeConfiguration<Or ...
- android完美的退出方法
http://blog.csdn.net/get123/article/details/9001214