对于你这种情况,最好选一个表格插件,JQ能用的第三方表格插件特别多,你想要的这些功能默认都已经支持,上手简单,且功能强大。
创新互联专注于汨罗企业网站建设,响应式网站开发,商城开发。汨罗网站建设公司,为汨罗等地区提供建站服务。全流程专业公司,专业设计,全程项目跟踪,创新互联专业和态度为您提供的服务
GridManager.js:
GridManager.js可快速的对table标签进行实例化,实例化后将实现以下功能:
宽度调整: 表格的列宽度可进行拖拽式调整
位置更换: 表格的列位置进行拖拽式调整
配置列: 可通过配置对列进行显示隐藏转换
表头吸顶: 在表存在可视区域的情况下,表头将一直存在于顶部
排序: 表格单项排序或组合排序
分页: 表格ajax分页,包含选择每页显示总条数和跳转至指定页功能
用户偏好记忆: 记住用户行为,含用户调整的列宽、列顺序、列可视状态及每页显示条数
序号: 自动生成序号列
全选: 自动生成全选列
导出: 当前页数据下载,和仅针对已选中的表格下载
右键菜单: 常用功能在菜单中可进行快捷操作
过滤: 通过对列进行过滤达到快速搜索效果
Datatables是一款jquery表格插件。它是一个高度灵活的工具,可以将任何HTML表格添加高级的交互功能。
分页,即时搜索和排序
几乎支持任何数据源:DOM, javascript, Ajax 和 服务器处理
支持不同主题 DataTables, jQuery UI, Bootstrap, Foundation
各式各样的扩展: Editor, TableTools, FixedColumns ……
丰富多样的option和强大的API
支持国际化
Bootstrap Table显示数据表格格式,提供了丰富的支持,单选框、复选框、排序、分页等。
更多插件可自行百度jquery table插件,类似的插件很多。
一、分页
分页的基本思想是根据datatable的页码及每页显示的行数,将数据从数据库分段提出,然后再填充到表格中,以达到分页的效果。
这里需要用到datatable插件的几个属性:
"sEcho":这个属性需要原封不动地传回给datatable,具体的作用我也不清楚,但是根据它值的变化情况来看,好像是一个操作次数的计数(之前我一直把它当做是pageindex来用,结果发现,不论我在datatable中是翻下一页还是翻上一页,它一直在增加。)
"iDisplayStart":这个属性,根据字面意思理解,就是每段数据开始的行数,比如第一页的数据就是从0开始计,那么它就是0,每页显示的行数是10,那么第二页的第一行的iDisplayStart就是10。
"iDisplayLength":这个属性就是每页显示的行数。
然后是数据库操作,只需要从数据库查询其中一段数据,然后输出出来,转成JSON格式,让datatable插件获取。在网上可以找到很多分页的方法,选择了其中一种,使用row_number()的分页的存储过程。具体代码如下(根据sql创建存储过程模板):
存储过程的两个参数,pageindex表示页索引即当前页码,不懂datatable有没有这项属性,所以是用计算的方法得来的,就是iDisplayStart/iDisplayLength+1。pagesize可以直接从datatable获得。
服务端的代码,我创建了一个datasource.ashx文件,代码如下:
DataTableToObjects类的代码如下:
需要注意的一点:iTotalRecords与iTotalDisplayRecords是两个不同的值,是改变分页栏显示用的参数,这里因为没有考虑数据过滤功能,所以都设置成数据的总的行数。
然后是客户端的代码,与之前的差不多:
因为测试,所以只提取了表中的三个字段,并且关闭了数据过滤及排序功能,其中,"bLengthChange"可以设置成true,因为服务端会获取datatable的iDisplayLenth参数,即使每页显示数变化,数据也可以正常获取。
这样就实现了jquery.datatable插件的服务端分页获取数据。
script language="javascript"
var pagesize=5;//每页显示几条信息
var totalRecord=$("#PageCon li").length;//获取信息的总数
//计算总页数
var totalPages=totalRecord % pagesize == 0 ? totalRecord / pagesize : Math.ceil(totalRecord / pagesize);
$(function(){
$('#PageShowUL').twbsPagination({
totalPages: totalPages,//总页数
visiblePages:7,//显示的页数
version:'1.1',//或1.0 1.1是自动根据当前页动态显示页码
first:"首页",
prev:"下一页",
next:"上一页",
last:"尾页",
onPageClick: function (event,page) {
$("#PageCon li").hide();
$("#PageCon li").slice((page-1)*pagesize,page*pagesize).show();
}
});
});
/script
具体的看这里:
twbs-pagination分页插件的实际应用实例
!DOCTYPE html
html lang="en"
head
meta charset="UTF-8"
meta name="viewport" content="width=device-width, initial-scale=1.0"
meta http-equiv="X-UA-Compatible" content="ie=edge"
titleDocument/title
/head
body
table
tr
th1/th
th2/th
th3/th
th4/th
/tr
/table
table id="result"
tr
td1/td
td2/td
td3/td
td4/td
/tr
tr
td1/td
td2/td
td3/td
td4/td
/tr
tr
td1/td
td2/td
td3/td
td4/td
/tr
tr
td1/td
td2/td
td3/td
td4/td
/tr
/table
div id="barcon"/div
script
window.onload = function () {
goPage(1)
}
function goPage(pno) {
var itable = document.getElementById("result");
var num = itable.rows.length; //表格所有行数(所有记录数)
console.log(num);
var totalPage = 0; //总页数
var pageSize = 3; //每页显示行数
//总共分几页
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; //开始显示的行 31
var endRow = currentPage * pageSize; //结束显示的行 40
endRow = (endRow num) ? num : endRow; //40
//遍历显示数据实现分页
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";
}
}
var pageEnd = document.getElementById("pageEnd");
var tempStr = "span共" + totalPage + "页/span";
if (currentPage 1) {
tempStr += "span class='btn spanbtn' href=\"#\" onClick=\"goPage(" + (1) + ")\"首页/span";
tempStr += "span class='btn spanbtn' href=\"#\" onClick=\"goPage(" + (currentPage - 1) + ")\"上一页/span"
} else {
tempStr += "span class='btn spanbtn'首页/span";
tempStr += "span class='btn spanbtn'上一页/span";
}
if (totalPage == 1) {
tempStr += "a onclick=\"goPage(" + currentPage + ")\"span class='spanbtn nowpage pageicon'" + currentPage +
"/span/a"
} else if (totalPage == 2 currentPage == 1) {
tempStr += "a onclick=\"goPage(" + currentPage + ")\"span class='spanbtn pageicon nowpage'" + currentPage +
"/span/a" + "a onclick=\"goPage(" + (currentPage + 1) + ")\"span class='spanbtn pageicon'" +
(currentPage + 1) + "/span/a"
} else if (totalPage == 2 currentPage == 2) {
tempStr += "a onclick=\"goPage(" + (currentPage - 1) + ")\"span class='spanbtn pageicon'" + (currentPage -
1) + "/span/a" + "a onclick=\"goPage(" + currentPage + ")\"span class='spanbtn nowpage pageicon'" +
currentPage + "/span/a"
} else if (totalPage = 3 currentPage == 1) {
tempStr += "a onclick=\"goPage(" + currentPage + ")\"span class='spanbtn nowpage pageicon'" + currentPage +
"/span/a" + "a onclick=\"goPage(" + (currentPage + 1) + ")\"span class='spanbtn pageicon'" +
(currentPage + 1) +
"/span/a" + "a onclick=\"goPage(" + (currentPage + 2) + ")\"span class='spanbtn pageicon'" + (
currentPage + 2) +
"/span/a"
} else if (totalPage = 3 currentPage == totalPage) {
tempStr += "a onclick=\"goPage(" + (currentPage - 2) + ")\"span class='spanbtn pageicon'" + (currentPage -
2) +
"/span/a" + "a onclick=\"goPage(" + (currentPage - 1) + ")\"span class='spanbtn pageicon'" +
(currentPage - 1) +
"/span/a" + "a onclick=\"goPage(" + currentPage + ")\"span class='spanbtn nowpage pageicon'" +
currentPage +
"/span/a"
} else {
tempStr += "a onclick=\"goPage(" + (currentPage - 1) + ")\"span class='spanbtn pageicon'" + (currentPage -
1) +
"/span/a" + "a onclick=\"goPage(" + currentPage + ")\"span class='spanbtn nowpage pageicon'" +
currentPage +
"/span/a" + "a onclick=\"goPage(" + (currentPage + 1) + ")\"span class='spanbtn pageicon'" + (
currentPage + 1) +
"/span/a"
}
if (currentPage totalPage) {
tempStr += "span class='btn spanbtn' href=\"#\" onClick=\"goPage(" + (currentPage + 1) + ")\"下一页/span";
tempStr += "span class='btn spanbtn' href=\"#\" onClick=\"goPage(" + (totalPage) + ")\"尾页/span";
} else {
tempStr += "span class='btn spanbtn'下一页/span";
tempStr += "span class='btn spanbtn'尾页/span";
}
document.getElementById("barcon").innerHTML = tempStr;
}
/script
/body
/html
自己修改一下table中元素的CSS样式,分页页码的样式,就能看出来效果了
在加载页面的时候发出一个请求,用ajax请求就可以,请求返回结果是获取所需要的所有信息,存在一个js对象里
//success是请求成功后的返回函数,msg代表的是服务端的返回值,也就是你需要的那些信息
可以将这些信息存到ListUser里,然后再将list转成JSONArray返回,msg就是返回值
var dataObj;
$.ajax({
url:"yourservlet",
type:"POST",
data:"你请求的参数,随便填,只要后台接收了然后调用业务层进行查询返回结果就行",
success:function(msg){
dataObj=msg;
alert("返回成功");
}
});
//之后已经获取到了数据到浏览器,需要根据页数来分页,就是遍历数组了,dataObj就是一个
json对象,根据你的每页数量和页数来获取,这就是思路