js分页实现,前端实现。

   主要是借鉴了网上一个例子,自己重新加了样式,添加了跳转,修改了一些小地方,用于和大家一起分享,前端分页的技巧,表格的数据是我已经写好了,其实大家也可以前端渲染表格然后再分页,都是可以的。


其实分页最关键是这两句:

var startRow = (currentPage - 1) * pageSize+1;  //currentPage 为当前页,pageSize为每页显示的数据量
var endRow = currentPage * pageSize;


找到我们需要显示的行的范围(starRow~endRow)


ps:这里在跳转的时候遇到了一个小BUG,就是获取到的select的value值是string类型的,比如获取到了1,然后你想再加1的时候就会变成"11" 而不是我们想要的"2"所以这里需要用parseInt( )来转换一下,小细节需要注意呀!!!


效果图:



<!doctype html>
<html>
<head>
 <meta charset='utf-8'>
 <style type="text/css">
  
   	 a{
		text-decoration: none;
	}
	
	.table2{
		border:#C8C8C8 solid;   
		border-width:1px 0px 0px 1px; 
		background: #F3F0F0;
		margin-top:25px;
	}
	
	.td0{
    	border:#C8C8C8 solid;  
		border-width:0 0 1px 0;
	}
	
	.td2{
    	border:#C8C8C8 solid;   
		border-width:0 1px 1px 0 ;
	}
	
	.barcon {
		width: 1000px;
		margin: 0 auto;
		text-align: center;
     }

	.barcon1 {
	    font-size: 17px;
	    float: left;
	    margin-top: 20px;
	}

	.barcon2 {
		float: right;
	}

	.barcon2 ul {
    	margin: 20px 0;
    	padding-left: 0;
    	list-style: none;
    	text-align: center;
	}

	.barcon2 li {
    	display: inline;
	}

	.barcon2 a {
		font-size: 16px;
		font-weight: normal;
		display: inline-block;
		padding: 5px;
		padding-top: 0;
		color: black;
		border: 1px solid #ddd;
		background-color: #fff;
	}

	.barcon2 a:hover{
		background-color: #eee;
	}

	.ban {
    	opacity: .4;
	}
 </style>
</head>
<body>
    <table width="950" cellpadding="0" cellspacing="0" class="table2" align="center">
	<thead>
	<tr>
	<td colspan="3" height="33" class="td0"> </td>
	<td align="center" class="td2"><a href="###">添加用户</a></td>
	</tr>
	<tr align="center">
		<th width="150" height="33" class="td2">序号</th>
		<th width="300" class="td2">用户名</th>
		<th width="250" class="td2">权限</th>
		<th width="250" class="td2">操作</th>
	</tr>
	</thead>
	<tbody id="adminTbody">
	<tr align="center">
		<td class="td2" height="33" width="150">1</td>
		<td class="td2" >admin</td>
		<td class="td2" >管理员</td>
		<td class="td2" ><a href="###">修改</a></td>
	</tr>
	</tbody>
</table>
<div id="barcon" class="barcon" >
	<div id="barcon1" class="barcon1"></div>
		<div id="barcon2" class="barcon2">
			<ul>
				<li><a href="###" id="firstPage">首页</a></li>
				<li><a href="###" id="prePage">上一页</a></li>
				<li><a href="###" id="nextPage">下一页</a></li>
				<li><a href="###" id="lastPage">尾页</a></li>
				<li><select id="jumpWhere">
				</select></li>
				<li><a href="###" id="jumpPage" οnclick="jumpPage()">跳转</a></li>
			</ul>
		</div>
</div>
<script src="jquery.js"></script>
<script>
/*动态生成用户函数
 num为生成的用户数量
*/
function dynamicAddUser(num){
	for(var i=1;i<=num;i++)
	{
			var trNode=document.createElement("tr");
			$(trNode).attr("align","center");
			//序号
			var tdNodeNum=document.createElement("td");
			$(tdNodeNum).html(i+1);
			tdNodeNum.style.width = "150px";
			tdNodeNum.style.height = "33px";
			tdNodeNum.className = "td2";
			//用户名
			var tdNodeName=document.createElement("td");
			$(tdNodeName).html("lzj"+i);
			tdNodeName.style.width = "300px";
			tdNodeName.className = "td2";
			//权限			
			var tdNodePri=document.createElement("td");
			tdNodePri.style.width = "250px";
			tdNodePri.className = "td2";
			var priText=document.createElement("span");
			$(priText).css({"display":"inline-block","text-align":"center"});
			$(priText).text("普通用户");
			tdNodePri.appendChild(priText);
			//操作
			var tdNodeOper = document.createElement("td");
			tdNodeOper.style.width = "170px";
			tdNodeOper.className = "td2";
			var editA = document.createElement("a");
			$(editA).attr("href", "###").text("编辑");
			$(editA).css({ display: "inline-block" });
			tdNodeOper.appendChild(editA);

			trNode.appendChild(tdNodeNum);
			trNode.appendChild(tdNodeName);
			trNode.appendChild(tdNodePri);
			trNode.appendChild(tdNodeOper);
			$("#adminTbody")[0].appendChild(trNode);
	}
}
$(function(){
	dynamicAddUser(80);
	goPage(1,10);
	var tempOption="";
	for(var i=1;i<=totalPage;i++)
	{
		tempOption+='<option value='+i+'>'+i+'</option>'
	}
	$("#jumpWhere").html(tempOption);
})

/**
 * 分页函数
 * pno--页数
 * psize--每页显示记录数
 * 分页部分是从真实数据行开始,因而存在加减某个常数,以确定真正的记录数
 * 纯js分页实质是数据行全部加载,通过是否显示属性完成分页功能
**/

var pageSize=0;//每页显示行数
var currentPage_=1;//当前页全局变量,用于跳转时判断是否在相同页,在就不跳,否则跳转。
var totalPage;//总页数
function goPage(pno,psize){
    var itable = document.getElementById("adminTbody");
    var num = itable.rows.length;//表格所有行数(所有记录数)

     pageSize = psize;//每页显示行数
    //总共分几页 
    if(num/pageSize > parseInt(num/pageSize)){   
            totalPage=parseInt(num/pageSize)+1;   
       }else{   
           totalPage=parseInt(num/pageSize);   
       }   
    var currentPage = pno;//当前页数
	 currentPage_=currentPage;
    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 = "";    
        }else{
            irow.style.display = "none";
        }
    }*/

	$("#adminTbody tr").hide();
	for(var i=startRow-1;i<endRow;i++)
	{
		$("#adminTbody tr").eq(i).show();
	}
    var tempStr = "共"+num+"条记录 分"+totalPage+"页 当前第"+currentPage+"页";
	 document.getElementById("barcon1").innerHTML = tempStr;
	 
    if(currentPage>1){
		$("#firstPage").on("click",function(){
			goPage(1,psize);
		}).removeClass("ban");
		$("#prePage").on("click",function(){
			goPage(currentPage-1,psize);
		}).removeClass("ban");   
    }else{
		$("#firstPage").off("click").addClass("ban");
		$("#prePage").off("click").addClass("ban");  
    }

    if(currentPage<totalPage){
		$("#nextPage").on("click",function(){
			goPage(currentPage+1,psize);
		}).removeClass("ban")
		$("#lastPage").on("click",function(){
			goPage(totalPage,psize);
		}).removeClass("ban")
    }else{
		$("#nextPage").off("click").addClass("ban");
		$("#lastPage").off("click").addClass("ban");
    }   
	
	$("#jumpWhere").val(currentPage);
}


function jumpPage()
{
	var num=parseInt($("#jumpWhere").val());
	if(num!=currentPage_)
	{
		goPage(num,pageSize);
	}
}

</script>
</body> 
</html>





  • 12
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
前端分页是指通过前端技术来实现对大量数据进行分页显示的功能。以下是一个简单的前端分页实现demo示例: HTML结构部分: ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>前端分页示例</title> </head> <body> <div id="pagination"></div> <ul id="dataList"></ul> <script src="pagination.js"></script> <script> // 模拟的数据列表 var dataList = [ {id: 1, name: "张三"}, {id: 2, name: "李四"}, {id: 3, name: "王五"}, // 此处省略部分数据 {id: 10, name: "赵六"}, {id: 11, name: "钱七"} ]; // 初始化分页器 var pagination = new Pagination("pagination", { totalCount: dataList.length, // 数据总数 pageSize: 5, // 每页显示的数据条数 onPageChange: function(pageIndex) { // 切换页码的回调函数 renderDataList(pageIndex); } }); // 渲染数据列表 function renderDataList(pageIndex) { var start = pageIndex * pagination.options.pageSize; var end = start + pagination.options.pageSize; var currentDataList = dataList.slice(start, end); var html = ""; for (var i = 0; i < currentDataList.length; i++) { html += "<li>" + currentDataList[i].id + " - " + currentDataList[i].name + "</li>"; } document.getElementById("dataList").innerHTML = html; } // 初始化时渲染第一页数据 renderDataList(0); </script> </body> </html> ``` JavaScript部分(pagination.js): ```javascript function Pagination(id, options) { this.container = document.getElementById(id); this.options = Object.assign({ totalCount: 0, pageSize: 10, onPageChange: function() {} }, options); this.init(); } Pagination.prototype.init = function() { this.pageCount = Math.ceil(this.options.totalCount / this.options.pageSize); this.currentPage = 0; this.render(); }; Pagination.prototype.render = function() { var html = "<button onclick='pagination.prev()'>上一页</button><span>" + (this.currentPage + 1) + " / " + this.pageCount + "</span><button onclick='pagination.next()'>下一页</button>"; this.container.innerHTML = html; }; Pagination.prototype.prev = function() { if (this.currentPage > 0) { this.currentPage--; this.options.onPageChange(this.currentPage); this.render(); } }; Pagination.prototype.next = function() { if (this.currentPage < this.pageCount - 1) { this.currentPage++; this.options.onPageChange(this.currentPage); this.render(); } }; ``` 通过在HTML中引入pagination.js文件,创建一个`Pagination`对象进行初始化,并传入相关配置。在切换页码时,会调用`onPageChange`配置的回调函数,利用`renderDataList`函数渲染对应页码的数据列表。同时,前端分页的原理是通过切片(`slice`)方法来提取对应页码的数据,在HTML中通过按钮的点击事件来切换页码,更新当前页码并重新渲染分页器和数据列表。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值