RE: Javascript分页处理

<div class="pager" id="pagination" name="pagination">
<!--<li><a href="#">上一页</a></li>
<li><a href="#" class="active">1</a></li>
<li><a href="#">2</a></li>
<li><a href="#">3</a></li>
<li><a href="#">4</a></li>
<li><a href="#">5</a></li>
<li><a href="#">下一页</a></li>-->
</div>
HTML的部分就是这个样子,我们需要获取 pagination,然后在里面输出分页页签。并且提前写好active的样式。
window.onload = function (){
……
page({
id:"pagination", //当前id
nowNum:1,//当前页
allNum:10, //显示总页妈
callBack:function(pno){
//回调函数,在这里写相关显示传参数,如对于列表页的展示
……
});
function page(opt){
if (!opt.id) {return false;}
var obj = document.getElementById(opt.id);
var nowNum = opt.nowNum || 1;//默认值1
var allNum = opt.allNum || 5;//默认值5
var callBack = opt.callBack || function(){};
//显示 首页btn
if(nowNum>=4 && allNum>=6){
var oA = document.createElement("a");//创建a标签
oA.href = "#1";//设置#的值
oA.innerHTML = "首页"//输出内容
obj.appendChild(oA);//添加oA
}
//显示 上一页btn
if(nowNum>=2){
var oA = document.createElement("a");
oA.href = "#" + (nowNum -1);
oA.innerHTML = "上一页"
obj.appendChild(oA);
}
//当总页数小于等于5的时候
if (allNum<=5) {
//总页数值为多少,输出多少按钮
for (var i =1;i<=allNum;i++) {
//创建a标签
var oA = document.createElement("a");
oA.href = "#"+i;
//当前页码效果
if (nowNum == i) {
oA.className = "active";//新增样式
oA.innerHTML = i;
}
//其他页码效果
else{
oA.innerHTML = i;
}
obj.appendChild(oA);
}
}
//当总页数大于5的时候
else{
for (var i =1;i<=5;i++) {
var oA = document.createElement("a");
//当当前按钮是1或者2时,会出现负数,需要控制
if (nowNum == 1 || nowNum == 2) {
oA.href = "#" + i;
if (nowNum == i) {
oA.className = "active";
oA.innerHTML = i;
}
else{
oA.innerHTML = i;
}
}
//通过总页-当前页的结果,判断点击最后的按钮时,如何输出
else if((allNum -nowNum) == 0 ||(allNum -nowNum) == 1){
oA.href = "#" + (allNum - 5 + i);
if ((allNum -nowNum) == 0 && i==5) {
oA.className = "active";
oA.innerHTML = (allNum - 5 + i);
}
else if((allNum -nowNum) == 1 && i==4){
oA.className = "active";
oA.innerHTML = (allNum - 5 + i);
}
else{
oA.innerHTML =(allNum - 5 + i);
}
}
else{
oA.href = "#" + (nowNum - 3 + i);
if (i==3) {//使当前页签始终处于中间
oA.className = "active";
oA.innerHTML =(nowNum - 3 + i);
}
else{
oA.innerHTML = (nowNum - 3 + i);
}
}
obj.appendChild(oA);
}
}
//显示 尾页btn
if((allNum - nowNum)>=3 && allNum >=6){
var oA = document.createElement("a");
oA.href = "#" + allNum;
oA.innerHTML = "尾页"
obj.appendChild(oA);
}
//显示 下一页btn
if((allNum - nowNum)>=1){
var oA = document.createElement("a");
oA.href = "#" + (nowNum +1);
oA.innerHTML = "下一页"
obj.appendChild(oA);
}
//callBack函数执行
callBack(nowNum,allNum);
//ithead 为表格需要输出的内容
var ithead = document.getElementById("idData");
//获得表格的行数长度
var num = idData.childNodes.length;
//无数据如何输出
if(num == 0){
obj.style.display="none";
var oB = document.getElementById("warning");
oB.innerHTML = "当前无成员周报数据";
}
else{
//给a添加点击事件
var aA = obj.getElementsByTagName("a");
for (var i =0;i<aA.length;i++) {
aA[i].onclick = function(){
var nowNum = parseInt(this.getAttribute("href").substring(1));
obj.innerHTML = "";
page({//重新赋值
id:opt.id,
nowNum:nowNum,
allNum:allNum,
callBack:callBack
});
return false;
};
}
}
}
$.ajax({
type:"get",
url:"/api/admin/show_weekly.php?session="+session_id,
dataType:'json',
success:function(json){
var num = json["data"].length;//JSON字符串的条数
var pageSize = 5; //每页显示行数
var page_num = Math.ceil(num/pageSize); //总页数
var page_now = page_num -(page_num-1); //等于第一页
page({
id:"pagination", //当前id
nowNum:page_now,//当前页
allNum:page_num, //显示总页妈
callBack:function(pno){
var itable = document.getElementById("idData");
$("#idData").html("");
for (var i =0; i <num;i++) {
itable.innerHTML += "<tr><td>"+ group(json["data"][i].group_id) + "</td>" +
"<td>"+ json["data"][i].name + "</td>" +
"<td>"+ json["data"][i].week_num + "</td>" +
"<td>"+ status(json["data"][i].status) + "</td>" +
"<td>"+ json["data"][i].text+ "</td></tr>";
};
之前提到有一次性加载数据和后台处理以后调用接口分次加载两种处理数据的方式。如果调用的是第二种,下面代码可直接省略。以下为对于每页多出行数数据的处理。
//如果调用的是非一次性输出所有数据的接口,以下隐藏处理可以省略
var totalPage = 0; // 总页数 //总共分几页
if(num/pageSize>parseInt(num/pageSize)){
totalPage = parseInt(num/pageSize)+1;
}else{
totalPage = parseInt(num/pageSize);
}
var currentPage = pno;//当前页数
var startRow = (currentPage - 1) * pageSize +1;
var endRow = currentPage * pageSize;
endRow = (endRow >num)? num:endRow; for (var i=1;i<(num+1);i++) {
var irow = itable.rows[i-1];
if (i>=startRow && i <=endRow) {
irow.style.display = "table-row";
} else{
//超出的部分隐藏掉
irow.style.display = "none";
}
}
}
});
},
error:function(json){
if (json.error != null) {
alert(json.error)
}
else{
alert("缺少必要的参数或参数为非数字");
}
}
});
后台SQL控制的好,完全可以将数据的切割交由他们,比起一次性加载完所有数据,由后台来控制数据显然更合理。
RE: Javascript分页处理的更多相关文章
- javascript实例学习之四——javascript分页
话不多少,直接上代码 html代码: <!DOCTYPE html> <html lang="en"> <head> <meta char ...
- sql,mybatis,javascript分页功能的实现
用三种不同的方法实现多数据的分页功能.原生sql和mybatis的操作需要每次点击不同页数时都发送http请求,进行一次数据库查询,如果放在前端页面写js语句则不需要每次都请求一次,下面是三种不同的方 ...
- 自制Javascript分页插件,支持AJAX加载和URL带参跳转两种初始化方式,可用于同一页面的多个分页和不同页面的调用
闲话部分 最近闲着实在无聊,就做了点小东西练练手,由于原来一直在用AspNetPager进行分页,而且也进行了深度的定制与原有系统整合的也不错,不过毕竟是用别人的,想着看自己能试着做出来不能,后台的分 ...
- 动手编写插件-javascript分页插件
原来公司用的报表分页插件是C#编写的服务器插件,需要前后台交互,而且不支持ajax. 经过一段时间折腾,我编写了一个轻便的jquery分页插件,支持ajax.下面是插件代码 /* 插件名称:报表分页 ...
- javascript 分页组件
自己写的一个简单的分页组件,主要功能还有实现都在JS中,html页面中只用增加一个放置生成分页的DIV,并给定容器的id. html结构如下: <ul class="paginatio ...
- 一个通用的JavaScript分页
1.JavaScript代码 Pagination=function(id) { var totalNum=0; var maxNum=10; var pageUrl=""; va ...
- javascript分页显示
//根据条件查找数据 list = Stdqj.FindAll() * , ); // 根据list查找的条件,查找list的总数(count) ViewBag.total = Stdqj.FindC ...
- JavaScript——分页
- JavaScript实现带省略号的分页
1.实现功能 可以跳转上一页.下一页.数据过多省略号显示,点击省略号可以实现快速跳转. 纯js+html+css实现,引入js文件后再使用方法即可快速生成. 2.实现过程 2.1 html页面(ind ...
随机推荐
- 在Ubuntu上安装arm-linux-gcc的问题
由于之前将Ubuntu的更新关掉了,所以导致我下载32位兼容包一直出错. 在arm-linux-gcc 安装之后,还不能编译程序的话,首先看自己的系统是多少位的,因为网上大部分的安装包都是32位的,所 ...
- (译)通过 HTML、JS 和 Electron 创建你的第一个桌面应用
原文:Creating Your First Desktop App With HTML, JS and Electron 作者:Danny Markov 近年来 web 应用变得越来越强大,但是桌面 ...
- redis C接口hiredis 简单函数使用介绍
hiredis是redis数据库的C接口,目前只能在linux下使用,几个基本的函数就可以操作redis数据库了. 函数原型:redisContext *redisConnect(const char ...
- unserialize() [function.unserialize]: Error at offset
$a = 'a:1:{i:0;s:12:"1,10,93,";}'; var_dump( unserialize( $a ) ); 运行之后页面上显示Notice: unseria ...
- 搭建git远程服务器三步骤
以前都是使用git,这次由于工作需要,需要自己搭建一个远程git服务器.根据网上的 介绍,捣鼓了一下午,终于把远程git服务器搞定了,这里,做个总结. 搭建git远程服务,首先要安装git和ssh,以 ...
- SSH/HTTPS安全的本质都依赖于TLS/SSL
1.SSH/HTTPS的安全本质是TLS/SSL. 2.1990年互联网上的网页主要是静态内容,作为信息发布,使用HTTP明文传输是可以的.不过,后来很多公司开始使用网页进行金融交易,例如:股票,于是 ...
- [js高手之路]html5 canvas动画教程 - 自己动手做一个类似windows的画图软件
这个绘图工具,我还没有做完,不过已经实现了总架构,以及常见的简易图形绘制功能: 1,可以绘制直线,圆,矩形,正多边形[已完成] 2,填充颜色和描边颜色的选择[已完成] 3,描边和填充功能的选择[已完成 ...
- Laplace(拉普拉斯)先验与L1正则化
Laplace(拉普拉斯)先验与L1正则化 在之前的一篇博客中L1正则化及其推导推导证明了L1正则化是如何使参数稀疏化人,并且提到过L1正则化如果从贝叶斯的观点看来是Laplace先验,事实上如果从贝 ...
- Nhibernate/Hibernate 使用多参数存儲過程 出現could not execute query,Could not locate named parameter等錯誤解決
<?xml version="1.0" encoding="utf-8" ?> <hibernate-mapping xmlns=" ...
- 斐讯 FIR151M 频繁掉线(OpenWRT解决方案)
0. 现象与前言 在使用斐讯 FIR151M 路由器连接网络时,传输数据时频繁掉线. 官方固件刷了两个版本,问题未解决. 建议高级用户看本教程,要做好不能使用 Web 管理界面的心理准备. 1. 准备 ...