`

利用JS+CSS对数据进行分页

阅读更多
看见许多关于分页的贴子,但始终没有找到一个自己喜欢的,也许是我没遇上,但不管怎么也好,自己动手写了一个,满足自己的需要.
个人习惯:
本人比较喜欢把分页分成2部分:后台数据源的部分,直接用procedure实现分页,这里不多说,另一部分就是前面WEB显示
实现思路:
见过比较多的做法是,把数据源load进session,然后给每页设定一个rowCount,再算出页数,然后生成页面和对应的数据.
本人比较懒,不喜欢那种老是点击页数提交的感觉,但也不喜欢用ajax来跟后台交互,把页面搞得太复杂了.
也不喜欢用控件,可能是之前.net的控件用不好的原因.剩下的,就是用js+css在一个页面实现分页了.
效果如下图:
....在最下面,是三个图片的合成
具体实现:
1.后台操作,把数据源request.setAttrib()
2.前面,在JSP里
先是获取数据
List list=null;
list=(LinkedList)request.getAttribute("list");
if(list==null){
	list=new LinkedList();
}

然后是生成表格
<form action="" method="post">
					<input type="hidden" name="referenceno" />
					<div id="data">
					<%
					String pages="";
					int count=list.size();
					int p=0;
					int pageItemCount=20;
					int pageCount=count/pageItemCount+1;
					for(int n=0;n<count;n+=pageItemCount){
					%>
					<div id="<%="div"+p %>">
						<table>
							<tr class="title">
								<td>REFNO</td>
								<td>JOBNO</td>
								<td>VENDER</td>
								<td>ORDER BY</td>
								<td>DATE</td>
								<td>HANGTAG</td>
								<td>LABEL</td>
								<td>DETAIL</td>
								<td>PROCESS</td>
							</tr>
							<%
							out.println();
							String order[];
							for(int i=n;i<n+pageItemCount&&i<count;i++){
								//declare temp variant
								String refno="";
								String jobno="";
								String orderman="";
								String vender="";
								String orderdate=""; 
								String ht="";
								String lbl="";
								String alternate="";
								//set alternate row style of class
								if(i%2==0)
									alternate="";
								else
									alternate=" class=\"alternate\"";
								
								order=(String[])list.get(i);
								//string[]:0-referenceno,1-jobno,2-name(orderman),
								//3-vender,4-status,5-orderdate,6-ht,7-lbl
								if(order[0]!=null && ! "null".equals(order[0])) refno=order[0];
								if(order[1]!=null && ! "null".equals(order[1]) && order[1].length()>3 && !"temp".equals(order[1].substring(0,4))) jobno=order[1];
								if(order[2]!=null && ! "null".equals(order[2])) orderman=order[2];
								if(order[3]!=null && ! "null".equals(order[3])) vender=order[3];
								if(order[5]!=null && ! "null".equals(order[5])) orderdate=order[5];
								if(order[6]!=null && ! "null".equals(order[6])) ht=order[6];
								if(order[7]!=null && ! "null".equals(order[7])) lbl=order[7];
								out.println("								"
								+"<tr"+alternate+">"
								+"<td>"+ refno +"</td>"
								+"<td>"+ jobno +"</td>"
								+"<td>"+ vender +"</td>"
								+"<td>"+ orderman +"</td>"
								+"<td>"+ orderdate +"</td>" 
								+"<td>"+ ht +"</td>"
								+"<td>"+ lbl +"</td>"
								+"<td><input type='button' value='DETAIL' class='btn' onclick='orderDetail(\""+refno+"\")'></td>"
								+"<td><input type='button' value='PROCESS' class='btn' onclick='processOrder(\""+refno+"\")'></td>"
								+"</tr>"
								);
							}
							pages+=" <a style='cursor:pointer;' onclick='setPage("+(p++)+","+pageCount+")',>"+p+"</a>";
							%>
						</table>
					</div>
					<%} %>
					</div>
					Page: <%=(pages.length()>0)?pages.substring(1):"" %>
					<script type="text/javascript">setPage(0,<%=pageCount%>);</script>
				</form>

生成HTML后的结构如图:
...在最下面
如结构图所示,在最终的HTML里,有一个div,里面包括了3页的数据,分别存在3个div里,然后利用js+css的把对应id的div的display属性来控制显示哪1页的数据
js代码
/*
 * control the div display or not
 * @param cur the div which want to display
 * @param sum div count (page count)
 */
function setPage(cur,sum){
		for(var i=0;i<sum;i++){
			var d=document.getElementById('div'+i);
			d.style.display="none";
		}
		var d=document.getElementById('div'+cur);
		d.style.display="block";
	}

css代码
<style type="text/css">
	form div {display:none;}
	form #data {height:530px;display:block;}
	form table {border-collapse:collapse;table-layout:fixed;font-size:9pt;text-align:center;}
	form tr.title {background-color:#aeaeae;font-weight:bold;}
	form tr.alternate {background-color:#d7d7d7;}
	form td {border:1px solid #777;}
	form td input.btn {width:60px;font-size:9pt;}
	form input.date {width:80px;}
	form a {text-decoration:underline;}
</style>

最后,弱弱地问一下,还有没有人用java直接写jsp的吗?个人感觉用控件生成的HTML代码太难读了
  • 描述: multi-page content
  • 大小: 363 KB
  • 大小: 72.1 KB
分享到:
评论
3 楼 glamey 2008-08-29  
我们应该杜绝这样的分页方式,太蠢了。

像我们做搜索引擎的,每次用户随便输入一个词,返回的结果可能是10K页左右,如果要这样做的话,那估计我们的服务器早都挂掉了。
LZ要好好考虑这个问题了。。
2 楼 ICBC-JavaBoy 2008-08-29  
qishi001 写道
不敢想象3000页怎么办.

"你杀了我吧...."
如果数据量相对大一点,那就会产生效率问题了吧.
这种分页的探索方式,还是持观望态度...
1 楼 qishi001 2008-08-28  
不敢想象3000页怎么办.

相关推荐

    jQuery,json传数据,分页的js和css代码

    该资源是利用jQuery来获取json所传的数据并进行处理,并用jQuery实现分页功能,此处为JS文件和css文件。

    ASP.NET开发实战1200例(第Ⅰ卷)第十二章

    实例316 利用JavaScript+CSS实现分页打印 496 12.5 JavaScript安全机制的应用 498 实例317 用JavaScript屏蔽部分键盘按键 498 实例318 利用JavaScript屏蔽鼠标右键 499 实例319 利用JavaScript禁止复制网页内容 500...

    大量数据html页面表格滚动显示

    可从后台写循环获取上万数据,赋值到js全局变量,每次滚动显示所需分页数据,不会一次性显示大数据量导致页面滚动卡死,从ag-grid控件中获取想法,该文件可参考,ag-grid利用css3不兼容ie8,已换成别的想法支持

    精通JS脚本之ExtJS框架.part1.rar

    分别介绍了JavaScript的对象编程、JavaScript浏览器对象模型和事件机制、ExtJS的核心类库和组件、ExtJS的事件处理方式、设计进度条、设计工具栏和菜单栏、设计面板、设计表格、设计表单、设计数据表、对Ajax的支持...

    AJAX基础概念、核心技术与典型案例(内涵动态实例)

    13.4.htm 直接对XML文档进行添加、删除和显示数据的操作 13.5.js Mozilla 浏览器中xml的应用 13.5.xml 简单的xml文件 13.6.htm 格式化输出xml文件 13.7.htm 一个添加/删除...

    精通JS脚本之ExtJS框架.part2.rar

    分别介绍了JavaScript的对象编程、JavaScript浏览器对象模型和事件机制、ExtJS的核心类库和组件、ExtJS的事件处理方式、设计进度条、设计工具栏和菜单栏、设计面板、设计表格、设计表单、设计数据表、对Ajax的支持...

    jQuery插件select2利用ajax高效查询大数据列表(可搜索、可分页)

    可以定制搜索、远程数据集(Remote data,本篇主要介绍点)、无限滚动(数据分页功能,这一点很妙)、还有很多高端的参数设置(有需要的下次介绍)。 内置了40种国际化语言,不过这里我们只需要用到中文。 同时支持...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part1

    实例110 通过正则表达式对字符串进行匹配查找 141 实例111 通过IP地址查找主机所在地 142 实例112 解决用substr()函数对中文字符串截取时出现乱码的问题 143 实例113 字符串与HTML标记相互转换 144 实例114 运用...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part2

    实例110 通过正则表达式对字符串进行匹配查找 141 实例111 通过IP地址查找主机所在地 142 实例112 解决用substr()函数对中文字符串截取时出现乱码的问题 143 实例113 字符串与HTML标记相互转换 144 实例114 运用...

    Ext+JS高级程序设计.rar

    6.1.4 编写JavaScript调用远程方法 172 6.2 为Ext.Direct自定义远程方法 173 6.3 Ext.Direct中的高级应用 178 6.3.1 批量请求和批量响应 178 6.3.2 在tree中使用Ext.Direct 181 6.3.3 为grid设置DirectStore 183 ...

    PHP程序开发范例宝典III

    实例217 对数据进行多条件排序 337 实例218 对统计结果进行排序 338 实例219 单列数据分组统计 340 实例220 多列数据分组统计 341 实例221 多表分组统计 342 8.9 聚集函数 344 实例222 使用聚集函数SUM...

    JavaScript网页特效范例宝典源码

    目录: 第1章 窗口/框架与导航条设计 1 1.1 弹出窗口控制 2 ...实例303 利用CSS样式分页打印 479 11.5 套打邮寄产品单 482 实例304 打印汇款单 482 实例305 打印快递单 484 实例306 打印信封 485 第...

    基于SSM框架与Bootstrap的CRUD实战源码

    本项目采用Maven进行项目管理和构建,整合了SpringMVC、Spring、MyBatis框架,并利用PageHelper进行分页处理,MyBatis Generator简化了数据层的开发工作。前端采用Bootstrap框架,使得界面响应式且美观易用。 核心...

    javascript网页特效实例大全(8-12)

    实例303 利用CSS样式分页打印 479 11.5 套打邮寄产品单 482 实例304 打印汇款单 482 实例305 打印快递单 484 实例306 打印信封 485 第12章 网站安全 489 12.1 禁止用户复制网页内容 490 实例307 禁止...

    GoodProject Maven Webapp.zip

    具有高效灵活的css选择器,并且可对CSS选择器进行扩展;拥有便捷的插件扩展机制和丰富的插件。jQuery兼容各种主流浏览器,如IE 6.0+、FF 1.5+、Safari 2.0+、Opera 9.0+等。 系统主要运用在:在系统中一些分页或者...

    网上日记本

    本系统在ASP环境下,利用ASP内置的五大对像,以及ado的使用,加上VBScript、JSscript语言开发。在外观和格式控制上,采用DHTM以及CSS样式表来实现。 2. 源代码(见附录1) 第六部分 软件...

    vuejs-smart-table-使用香草HTML表格结构的直接表组件,具有开箱即用的排序,过滤,分页和选择功能。-Vue.js开发

    VueJs Smart Table Vue Smart Table的创建是由于不需要使用高度可定制的简单数据表插件,而可以利用Vue的sl VueJs Smart Table Vue Smart Table的创建是由于无需使用简单的高度可定制的数据表插件即可Vue插槽的优势...

    js使用小技巧

    Javascript小技巧一箩筐 事件源对象 event.srcElement.tagName event.srcElement.type 捕获释放 event.srcElement.setCapture(); event.srcElement.releaseCapture(); 事件按键 event.keyCode ...

    Layui表格监听行单双击事件讲解

    我们一般都是利用layui插件里的layui数据表格加载数据库中的数据,而layui表格里有许多的事件监听,比如监听行的单双击事件,可利用行的单双击事件实现很多我们想要的功能,比单击某条数据可以进行修改、删除操作,...

Global site tag (gtag.js) - Google Analytics