首页 > 其他分享 >js端 分页导航条

js端 分页导航条

时间:2022-11-19 19:37:24浏览次数:63  
标签:pageIndex span 分页 pageSize rowCount js var html 导航条

有些情况 界面一次性加载完所有数据,table 列表的形式展示:
对于这样的情况有时候需要用js将这些数据进行分页显示。

下面的js实现的就是纯js 分页条。
/**
* 纯js端分页导航条
* @verson v2.0
* @param {} tableId 数据grid table id
* @param {} pageIndex 前页码
* @param {} navPagerObjName 此对象在页面上的变量全名
* @param {} pageSize 每页显示的记录条数
* @param {} pagerId 显示分页条的 div 或者 span id
*/
function NavPager(tableId,pagerId,navPagerObjName,pageSize,rangeSize){
this.pageIndex = 1;
this.pageSize = pageSize | 10;
this.rangeSize = rangeSize | 3;
this.pageCount = 0;
this.tableId = tableId;
this.pagerId = pagerId;
this.navPagerObjName = navPagerObjName ;
this.tableObj = document.getElementById(this.tableId);//tablegrid object
var tmp = this.tableObj.getElementsByTagName("tbody");
this.pageBarClass = "pageBar";//css
this.rowcss = "row";
this.rowcss_0 = this.rowcss + "0";
this.rowcss_1 = this.rowcss + "1";

if(!tmp || tmp.length<1){
return;
}
if(isNaN(this.pageSize) || this.pageSize < 1){
this.pageSize = 10;
}
this.oldBody = tmp[0];//table tbody object
var rows = this.oldBody.getElementsByTagName("tr");// tr rows
this.dataRows = [];
for(var i=0,count=rows.length;i<count;i++){
this.dataRows[i] = rows[i].cloneNode(1);
}
this.rowCount = this.dataRows.length;
if(this.rowCount <=this.pageSize){
$("#" + pagerId).hide();
return;
}
this.pageCount = parseInt((this.rowCount + 1) /this.pageSize);
if(isNaN(this.curPage) || this.curPage < 1){
this.curPage = 1;
}
this.updateTableRows();
}

/**
* 更新表格数据以及分页导航条
*/
NavPager.prototype.updateTableRows = function(){
var start = (this.pageIndex -1) * this.pageSize;
var end = start + this.pageSize -1;
if(end >= this.rowCount){
end = this.rowCount -1;
}
var tmpRows = this.cloneDataRows();
this.tableObj.removeChild(this.oldBody);
var newBody = document.createElement("tbody");
for(var i=start;i<=end;i++){
var row = tmpRows[i];
$(row).removeClass(this.rowcss_0);
$(row).removeClass(this.rowcss_1);
$(row).addClass(this.rowcss + (i % 2));
newBody.appendChild(row);
}
this.oldBody = newBody;
this.tableObj.appendChild(newBody);
var preHtml = this.getPreBar();
var lastHtml = this.getpostBar();
var html = "<table style='width:100%;' border='0px'><tr><td align='left'>";
html += preHtml;
html += "</td><td align='right'>";
html += lastHtml;
html += "</td></tr></table>";
$("#" + this.pagerId).html(html);
$("#" + this.pagerId).show();
}

/**
* 跳转到指定的页
*/
NavPager.prototype.numberPage = function(curPage){
this.pageIndex = curPage;
if((this.pageIndex - 1) * this.pageSize > this.rowCount){
this.pageIndex = 1;
}
this.updateTableRows();
}

/**
* 获取分页条前部分html内容
*/
NavPager.prototype.getPreBar = function(){
var span = "<span style='width:100%;text-align:left;margin-left:2px;'>";
span += this.pageIndex + "/" + this.pageCount + "页 " ;
var start = ( this.pageIndex -1 ) * this.pageSize + 1;
var end = start + this.pageSize -1;
if(end > this.rowCount){
end = this.rowCount;
}
span += "显示从" + start +"到" + end + "条 共" + this.rowCount + "条 ";
span += "</span>";
return span;
}

/**
* 获取分页条后部分html内容
*/
NavPager.prototype.getpostBar = function(){
var span = "<span style='width:100%;text-align:right;margin-left:2px;'>";
span +="<a href='javascript:void(0);' οnclick='" + this.navPagerObjName + ".numberPage(" + 1 + ")' >首页</a> ";
var front = this.pageIndex - this.rangeSize;
var back = this.pageIndex + this.rangeSize;
var buf = "";
// 如果当前页是5,前面一截就是234,后面一截就是678
if (this.pageCount > 1) {
var tempBack = this.pageCount;
var tempFront = 1;
if (back < this.pageCount){
tempBack = back;
}
if (front > 1){
tempFront = front;
}
if(tempFront > 1){
buf += "... ";
}
for (var i = tempFront; i <= tempBack; i++) {
if (this.pageIndex == i) {
var str = "<font color = 'red'>" + i + "</font> ";
buf += str;
} else {
buf +="<a href='javascript:void(0);' οnclick='" + this.navPagerObjName + ".numberPage(" + i + ")' >" + i +"</a> ";
}
}
if(tempBack < this.pageCount){
buf += "... ";
}
}

span += buf ;
span +="<a href='javascript:void(0);' οnclick='" + this.navPagerObjName + ".numberPage(" + this.pageCount + ")' >尾页</a> ";
span += "</span>";
return span;
}

/**
* 克隆数据
* @returns {Array}
*/
NavPager.prototype.cloneDataRows = function(){
var rows = [];
for(var i=0,count=this.dataRows.length;i<count;i++){
rows[i] = this.dataRows[i].cloneNode(1);
}
return rows;
}

标签:pageIndex,span,分页,pageSize,rowCount,js,var,html,导航条
From: https://blog.51cto.com/u_15458282/5870596

相关文章

  • flex 编写分页导航条(demo) 以及 label link事件学习
    label对象:idtxt,如果想将触发link事件的话:需要将selectable="true"txt.htmlText="<ahref='event:click'>con</a>“;txt.addEventListener(Text......
  • 日学壹技:json.load() vs json.loads()
    导读本文演示如何使用Python的json.load()和json.loads()方法从文件和字符串中读取JSON数据。使用json.load()和json.loads()方法,您可以将JSON格式的数据转......
  • fpjson使用例子【转】
    lazarusfpjson使用例子procedureTForm1.Button2Click(Sender:TObject);varjData:TJSONData;jDataArr:TJSONData;jObject:TJSONObject;jArray:TJSONA......
  • commonjs规范 require 函数解析
    functionrequire(modulePath){//1.根据传入的模块路径得到模块完整的绝对路径constmoduleId=getModuleId(modulePath)//2.判断缓存if(cache[mo......
  • Bot in Discord with discord.js (9)
    BotinDiscordwithdiscord.js(9)Chapter10-交互四大组件之:按钮新建一个操作行ActionRow上来先导入需要的ActionRowBuilder,用于建立操作行ActionRow。通过ne......
  • js 之在图片添加链接、视频等
    一、效果图   ......
  • JS中各种for循环
    1.for循环vararr=[1,2,3];for(vari=0;i<arr.length;i++){console.log(i+'-'+arr[i]);}//0-1//1-2//2-32. forEach 遍历遍历数组列出......
  • JavaWeb实战:基础CRUD+批量删除+分页+条件
    技术栈及相关参考资料:MyBatis基础Servlet基础ServletRequest和ServletResponseMVC模式和三层架构AJAX基础+Axios基础Vue前端框架Element目录1、需求2、环境准......
  • nodejs是什么
    Node.js®是一个开源、跨平台的JavaScript运行时环境。下载https://nodejs.org/dist/v18.12.1/node-v18.12.1-x64.msi在终端打开node-v显示版本号则成功3.......
  • 使用JSZIP打包下载多个echarts图片
    JSZIP的github地址:https://github.com/Stuk/jszip多个echarts图一键下载charts_all.map(([index,myChart])=>{constimgContent=myChart.getDataURL({......