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分页)的更多相关文章

  1. 【QRcode二维码】:使用JS前端插件QRcode.js生成二维码

    1.先简单说一下jquery-qrcode,这个开源的三方库(可以从https://github.com/jeromeetienne/jquery-qrcode 获取), qrcode.js 是实现二 ...

  2. js前端数据验证JS工具

    var regexEnum = { intege : "^-?[1-9]\\d*$", // 整数 intege1 : "^[1-9]\\d*$", // 正整 ...

  3. Html辅助方法(分页、下拉框)

    引用命名空间: using System.Text; using System.Web.Mvc; Html分页方法 #region 分页Html辅助方法 /// <summary> /// ...

  4. .net分页方法

    .net分页方法 //记录分页的总条数 DX.Model.Container.PagerDataContainer Container = new DX.Model.Container.PagerDa ...

  5. js前端分页之jQuery

    锋利的js前端分页之jQuery 大家在作分页时,多数是在后台返回一个导航条的html字符串,其实在前端用js也很好实现. 调用pager方法,输入参数,会返回一个导航条的html字符串.方法的内部比 ...

  6. js 前端操作的分页路由设计

    //分页条获得分页数字,然后跳转到拼接字符串的页面 function getPage(page) { var window_href = location.pathname; var newWindo ...

  7. 纯Jquery前端分页

    ---恢复内容开始--- 由于之前自己做过jquery分页,就是调用jni接口时,只能用前台分页解决显示问题.最近看到有人提这样的问题:一个请求传过来上万个数据怎么办?于是萌生了写这篇博客的想法. 效 ...

  8. ThinkPHP AJAX分页及JS缓存的应用

    //AJAX分页详见兄弟连PHP项目视频教程22讲35分钟左右 主要实现是需要将分页中的每个链接都改为AJAX请求 //前端缓存技术:基于javascript传输的数据,只要浏览器没关,都保存在内存中 ...

  9. 前端Js跨域方法汇总—剪不断,理还乱,是跨域

    1.通过jsonp跨域2.通过修改document.domain来跨子域(iframe)3.隐藏的iframe+window.name跨域4.iframe+跨文档消息传递(XDM)5.跨域资源共享 C ...

随机推荐

  1. KMLLayer

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  2. Java 分页对象

    以前一直没有自己写过分页对象,自己模仿着写了一个分页对象,写完之后感觉也是挺简单的 package com.css.util; import java.io.Serializable;import j ...

  3. 拦截导弹 (最长上升子序列LIS)

    #include <iostream> #include <stdio.h> #include <algorithm> using namespace std; ] ...

  4. js自定义滚动条

    今天听到别人说自定义滚动条,所以就在吃饭的时间写了个 html部分 <div class="out" id="out"> <div class ...

  5. SQL SERVER 2008 R2 插入数据非常慢

    表是5字段int类型,第一个字段是主健,自增字段 表结构: id int  Uncheckedbillno bigint  Uncheckedopid int  Checkedbillopid int ...

  6. VUE中的style 样式处理的Scope (<style scope>)

    在VUE组件中,为了让样式私有化,不对全局造成污染,可以在style标签上添加scoped属性以表示它的只属于当下的模块. 但是这样的话,就会导致无法修改其他第三方组件样式,或者是内嵌的样式,解决方案 ...

  7. Directx11教程(13) D3D11管线(1)

    原文:Directx11教程(13) D3D11管线(1)       从本篇教程开始,我们暂停代码的学习,先来了解一下D3D11的管线,这些管线不涉及具体的硬件,而是着重于理解能够支持D3D11的管 ...

  8. C++之ARX 读取配置文件内容时,会出现编码问题(utf-8转unicode)

    CString CConvert::UTF82WCS(const char* szU8){ //预转换,得到所需空间的大小; int wcsLen = ::MultiByteToWideChar(CP ...

  9. JavaScript中的this关键字的几种用法

    JS 里的 this 在 function 内部被创建 指向调用时所在函数所绑定的对象(拗口) this 不能被赋值,但可以被 call/apply 改变 1. this 和构造函数 function ...

  10. 2018-10-19-Roslyn-使用-Directory.Build.props-文件定义编译

    title author date CreateTime categories Roslyn 使用 Directory.Build.props 文件定义编译 lindexi 2018-10-19 18 ...