`

js端 分页导航条

阅读更多
有些情况 界面一次性加载完所有数据,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 + "页&nbsp;" ;
var start = ( this.pageIndex -1 ) * this.pageSize + 1;
var end = start + this.pageSize -1;
if(end > this.rowCount){
end = this.rowCount;
}
span += "显示从" + start +"到" + end + "条&nbsp;共" + this.rowCount + "条&nbsp;";
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);' onclick='" + this.navPagerObjName + ".numberPage(" + 1 + ")' >首页</a>&nbsp;";
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 += "...&nbsp;";
}
        for (var i = tempFront; i <= tempBack; i++) {      
            if (this.pageIndex == i) {      
                var str = "<font color = 'red'>" + i + "</font>&nbsp;";      
                buf += str;      
            } else {      
            buf +="<a href='javascript:void(0);' onclick='" + this.navPagerObjName + ".numberPage(" + i + ")' >" + i +"</a>&nbsp;";
            }      
        }
if(tempBack < this.pageCount){
buf += "...&nbsp;";
}
    }

span += buf ;
span +="<a href='javascript:void(0);' onclick='" + this.navPagerObjName + ".numberPage(" + this.pageCount + ")' >尾页</a>&nbsp;";
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;
}
分享到:
评论

相关推荐

    基于angular.js的分页导航

    本教程将深入探讨如何使用AngularJS实现一个功能完备的分页导航条。 一、AngularJS基础知识 AngularJS的核心特性包括数据绑定、依赖注入、指令系统、过滤器等。在分页导航中,我们将主要利用数据绑定和指令来实现...

    一个很炫的分页导航条display+position属性

    根据提供的文件信息,本文将详细解释如何通过使用CSS中的`display`属性与`position`属性来构建一个炫酷且实用的下拉菜单式分页导航条。此外,还将简要介绍部分VBScript代码的作用,这部分代码用于实现后端逻辑,如...

    分页导航通用类和js

    总的来说,这个“分页导航通用类和js”项目提供了一种实现客户端分页的方法,结合jQuery,可以方便地在各种Web应用中实现高效且灵活的分页功能。通过理解和应用这些技术,开发者可以优化用户体验,提高网页加载速度...

    11款适合移动设备使用CSS3分页导航条

    5. **JavaScript和jQuery的使用**:虽然标题未明确提及jQuery,但考虑到`js`目录的存在,这些分页导航条很可能使用了JavaScript或者jQuery来处理用户交互,如点击事件、页面切换效果等。 6. **响应式布局**:每个...

    京东页面JS效果实现,js实现导航条控制,很完整

    "京东页面JS效果实现,js实现导航条控制"这个主题聚焦于如何使用JavaScript来创建类似京东网站的导航条交互效果。下面将详细介绍这个知识点,并提供一个具体的实例——"360buyleftmenu_jb51net"。 1. **JavaScript...

    JAVA分页实现JAVA+JS+HTML

    2. **分页导航**:创建分页导航栏,包含“上一页”、“下一页”按钮和页码列表。 3. **样式设计**:通过CSS定制分页组件的样式,使其符合网站设计风格。 4. **响应式布局**:确保在不同设备和屏幕尺寸下,分页功能...

    JS+HTML分页代码

    这些是分页导航的基本元素,JavaScript会根据当前页码状态判断这些元素是否可用。例如,如果当前是第一页,首页和前页按钮可能会被禁用;如果当前页是最后一页,后页和尾页按钮则会被禁用。 **分页页号**: 通常,...

    前后端分页.rar

    1. **前端分页**:前端分页主要通过JavaScript(可能使用jQuery或其他库如Vue.js、React等)实现,通常包含页码显示、跳转按钮和每页条数选择。在这个项目中,前端代码可能会根据用户的选择发送Ajax请求到服务器,...

    JS分页效果JS分页效果JS分页效果

    分页通常包含以下几个关键元素:总条数、每页显示条数、当前页数以及分页导航。 二、JavaScript在分页中的作用 JavaScript在分页中主要负责以下任务: 1. 计算总页数:根据数据总数和每页显示的数量来确定。 2. ...

    js实现简单分页导航栏效果

    接下来,使用jQuery清空分页导航条的内容,并根据当前页面位置,动态添加首页、上一页、页码链接和下一页、尾页的链接。为了优化用户体验,当前页面的链接将被赋予一个“active”类名,这通常会在CSS中定义特殊的...

    js分页javascript分页

    2. Pagination.js:一个独立的JavaScript分页库,支持自定义分页样式,支持Ajax请求数据。 3. vue-paginate:针对Vue.js框架的分页组件,易用且高度可定制。 4. react-pagination:适用于React应用的分页组件,可与...

    js分页代码,分页代码

    - 生成分页导航条,让用户可以点击不同的页码切换页面。 - 示例代码中也没有完整地展示这部分逻辑,但是可以通过计算总的页数和当前页来生成相应的页码链接。 ### 四、示例代码分析 #### 1. **样式设置** - ...

    servlet+jsp+js分页组件

    5. **界面控制**:根据总页数,JavaScript更新分页导航条的状态,比如禁用首尾页按钮、高亮当前页等。 案例中的"MVC真分页.doc"可能包含了关于如何将模型-视图-控制器(MVC)设计模式应用于分页组件的详细说明。MVC...

    使用js实现简单分页

    同时,生成分页导航条,包括“上一页”、“下一页”按钮以及页码选择器。 4. **事件监听**:添加事件监听器,当用户点击分页按钮时,更新当前页数并重新执行数据处理和视图渲染。 5. **优化用户体验**:考虑分页...

    js分页功能 js分页功能

    - **分页原理**:分页是将大量数据分成若干小块,每次只加载一部分到页面中,用户可以通过页码或导航按钮进行翻页。 - **分页元素**:页码、上一页/下一页按钮、跳转页码输入框、每页显示条数选择等。 2. **数据...

    js写的仿extjs的分页工具条

    4. **自适应性**:EXTJS的组件通常对各种屏幕尺寸都有很好的适应性,我们的JavaScript分页工具条也需要考虑响应式布局,以适应不同设备的屏幕大小。 总的来说,实现一个仿EXTJS的分页工具条需要对JavaScript DOM...

    纯js实现分页 可跳转指定页

    通过上述步骤,我们可以构建一个灵活、可自定义的JavaScript分页插件,它不仅能满足基本的分页需求,还能根据用户的交互进行指定页的跳转,同时提供丰富的样式定制选项。在实际开发中,这样的插件可以帮助我们高效地...

    js静态分页 javascript

    5. **分页UI**:创建一个分页导航栏,显示页码按钮。根据总数据量和每页显示数量,计算总页数,并动态生成这些按钮。通常还需要“上一页”和“下一页”的链接,以及可能的“跳转到指定页”输入框。 6. **事件监听**...

Global site tag (gtag.js) - Google Analytics