JS 客户端 实现 无刷新分页 table表格实例
问题:实现如下功能需求
1.table 按行数 分页
2.js 实现客户端无刷新效果
3.分页脚注 比较美观
4.可扩展 维护性比较好
http://dl.iteye.com/upload/attachment/0063/9770/9ee93224-b537-316c-af9d-fb25a8f480c0.png
<html version="-//W3C//DTD HTML 4.01 Transitional//EN"> <head> <style type="text/css"> .pg-normal { color: black; font-weight: normal; text-decoration: none; cursor: pointer; } .pg-selected { color: black; font-weight: bold; text-decoration: underline; cursor: pointer; } </style> <script type="text/javascript" src="paging.js"></script> </head> <body> <form action="" method="get" enctype="application/x-www-form-urlencoded"> <table id="results"> <tr> <th>#</th> <th>field</th> </tr> <tr> <td>1</td> <td><input type="text" name="field-name" value="rec1"></td> </tr> <tr> <td>2</td> <td><input type="text" name="field-name" value="rec2"></td> </tr> <tr> <td>3</td> <td><input type="text" name="field-name" value="rec3"></td> </tr> <tr> <td>4</td> <td><input type="text" name="field-name" value="rec4"></td> </tr> <tr> <td>5</td> <td><input type="text" name="field-name" value="rec5"></td> </tr> <tr> <td>6</td> <td><input type="text" name="field-name" value="rec6"></td> </tr> <tr> <td>7</td> <td><input type="text" name="field-name" value="rec7"></td> </tr> <tr> <td>8</td> <td><input type="text" name="field-name" value="rec8"></td> </tr> <tr> <td>9</td> <td><input type="text" name="field-name" value="rec9"></td> </tr> <tr> <td>10</td> <td><input type="text" name="field-name" value="rec10"></td> </tr> </table> <div id="pageNavPosition"></div> <div><input type="submit"/>&nbsp;<input type="reset" /></div> </form> <script type="text/javascript"><!-- var pager = new Pager('results', 3); pager.init(); pager.showPageNav('pager', 'pageNavPosition'); pager.showPage(1); //--></script> </body></html>
function Pager(tableName, itemsPerPage) { this.tableName = tableName; this.itemsPerPage = itemsPerPage; this.currentPage = 1; this.pages = 0; this.inited = false; this.showRecords = function(from, to) { var rows = document.getElementById(tableName).rows; // i starts from 1 to skip table header row for (var i = 1; i < rows.length; i++) { if (i < from || i > to) rows.style.display = 'none'; else rows.style.display = ''; } } this.showPage = function(pageNumber) { if (! this.inited) { alert("not inited"); return; } var oldPageAnchor = document.getElementById('pg'+this.currentPage); oldPageAnchor.className = 'pg-normal'; this.currentPage = pageNumber; var newPageAnchor = document.getElementById('pg'+this.currentPage); newPageAnchor.className = 'pg-selected'; var from = (pageNumber - 1) * itemsPerPage + 1; var to = from + itemsPerPage - 1; this.showRecords(from, to); } this.prev = function() { if (this.currentPage > 1) this.showPage(this.currentPage - 1); } this.next = function() { if (this.currentPage < this.pages) { this.showPage(this.currentPage + 1); } } this.init = function() { var rows = document.getElementById(tableName).rows; var records = (rows.length - 1); this.pages = Math.ceil(records / itemsPerPage); this.inited = true; } this.showPageNav = function(pagerName, positionId) { if (! this.inited) { alert("not inited"); return; } var element = document.getElementById(positionId); var pagerHtml = '<spanclass="pg-normal"> &#171 Prev </span> | '; for (var page = 1; page <= this.pages; page++) pagerHtml += '<span id="pg' + page + '" class="pg-normal" >' + page + '</span> | '; pagerHtml += '<spanclass="pg-normal"> Next »</span>'; element.innerHTML = pagerHtml; }}
如果要实现美观效果 可自己加入css
实例扩展如下
http://dl.iteye.com/upload/attachment/0063/9774/1611d4cf-9226-301d-9c2d-1eb0a2c6f75d.png
相应css代码
#pageNavPosition{ margin: 20px 0 0; padding: 3px; text-align: center;}.pg-normal {border: 1px solid #DDDDDD;cursor:pointer;color: #61AF3F;margin-left: 2px;padding: 2px 5px;text-decoration: none;}.pg-selected {background-color: #A1D888;border: 1px solid #B2E05D;color: #638425;padding: 2px 5px;cursor:pointer;}
页:
[1]