`
ice-cream
  • 浏览: 328254 次
  • 性别: Icon_minigender_2
  • 来自: 上海
社区版块
存档分类
最新评论

jquery 排序+分页

阅读更多
<script type="text/javascript">
	$(document).ready(function(){
		$("table.sortable").each(function(){
			var $table = $(this);
			$table.alternateRowColors();
			$("th",$table).each(function(column){				
				var findSortKey;
				if ($(this).is(".sort-alpha")){				
					findSortKey = function($cell){						
						return $cell.find(".sort-key").text().toUpperCase() + " " + $cell.text().toUpperCase();	
					};
				}
				else if($(this).is(".sort-numeric")){
					findSortKey = function($cell){					
						var key = parseFloat($cell.text().replace(/^[^\d.]*/," "));
						return isNaN(key) ? 0 : key;
					};
				}
				else if($(this).is(".sort-data")){
					findSortKey = function($cell){
						return Date.parse('1 ' + $cell.text());
					};
				}
				
				if(findSortKey){				
					$(this).hover(
						function(){
							$(this).addClass("hover");
						},
						function(){
							$(this).removeClass("hover");
						}).click(function(){
						var newDirection = 1;
						if($(this).is(".sorted-asc")){
							newDirection = -1;
						}
						var rows = $table.find("tbody > tr").get();
						$.each(rows,function(index,row){
							row.sortKey = findSortKey($(row).children("td").eq(column));							
						});
						rows.sort(function(a,b){
							if(a.sortKey < b.sortKey) return -newDirection;
							if(a.sortKey > b.sortKey) return newDirection;
							return 0;
						});
						$.each(rows,function(index,row){
							$table.children("tbody").append(row);
							row.sortKey = null;
						});
						$table.find("th").removeClass("sorted-asc").removeClass("sorted-desc");
						var $sortHead = $table.find('th').filter(":nth-child(" + (column+1) + ")");
						if(newDirection == 1){
							$sortHead.addClass("sorted-asc");
						}
						else{
							$sortHead.addClass("sorted-desc");	
						}
						$table.find('td').removeClass("sorted").filter(":nth-child(" + (column+1) + ")").addClass("sorted");
						$table.alternateRowColors();
						$table.trigger("repaginate");	
					});
				};
			});
			var currentPage = 0;
			var numperpage = 5;
			var $table = $(this);
			$table.bind("repaginate",function(){				
				$table.find("tbody tr").show();				
				$("tbody tr:lt(" + currentPage * numperpage + ")").hide().end();				
				$("tbody tr:gt(" + ((currentPage + 1) * numperpage -1) + ")").hide().end();
				
			});
			var numRows = $table.find("tbody tr").length;
			var numPages = Math.ceil(numRows/numperpage);
			var $pager = $('<div class="page"></div>');
			for(var page=0;page<numPages;page++){
				$('<span class="page-number">' + (page+1) + '</span>').bind("click",{"newPage":page},function(event){
					currentPage = event.data["newPage"];				
					$table.trigger("repaginate");			
					$(this).addClass("active").siblings().removeClass("active");
				}).appendTo($pager);
			}
			$pager.find("span.page-number:first").addClass("active");
			$pager.insertBefore($table);
			$table.trigger("repaginate");
		});
	});	
</script>

这段javascript分成两部分看

 

A . 这里主要是用javascript内置的.sort()方法给table表格排序 .

返回值

      正值,如果第一个参数比第二个参数大。

      零,如果两个参数相等。

      负值,如果所传递的第一个参数比第二个参数小。

 

1 .隔行换色,我在这里构建了一个alternateRowColors()隔行换色的jquery插件,把它写在了jquery-1.2.6.js库件里

jQuery.fn.alternateRowColors = function(){
	$("tbody tr:odd",this).removeClass("even").addClass("odd");
	$("tbody tr:even",this).removeClass("odd").addClass("even");
	return this;
}
 

调用的时候,这么写$table.alternateRowColors();和其它方法的使用一样.

load页面后执行一次alternateRowColors,click排完序后再执行一次alternateRowColors,否则奇偶排序乱掉了

 

3 .我们需要知道当前点击的是第几列,所以需要传个column获取索引。$("th",$table).each(function(column){})

 

2 .分别对除第一列的每列进行排序

 

   a . .sort()方法

rows.sort(function(a,b){
	if(a.sortKey < b.sortKey) return -1;
	if(a.sortKey > b.sortKey) return 1;
	return 0;
});

 在这里既要顺序也要逆序排序,所以要定义个var newDirection;顺序排的时候var newDirection = 1;逆序var newDirection = -1

 

    b .第三列,注意了,我这里是按照从第二个单词开始排的序。用span标签取出除第一个单词以外内容。

第二列和第三列的findSortKey的取值写在一起:

if ($(this).is(".sort-alpha")){				
	findSortKey = function($cell){						
	        return $cell.find(".sort-key").text().toUpperCase() + " " + $cell.text().toUpperCase();	
	};
}

所以后面要加上" " + $cell.text().toUpperCase();这是第二列的findSortKey值。

 

    c .第四列是日期,用Date方法。因为我们的日期没有“日”,所以把“日”都设为1。

else if($(this).is(".sort-data")){
	findSortKey = function($cell){
		return Date.parse('1 ' + $cell.text());
	};
}

 

    d .第五列是价格,用正则表达式把出现任意次的换行和回车之外的任意字符和除了数字替换成空格

* : 出现零次或多次(任意次)

\d : [0-9] 数字

. : 除了换行和回车之外的任意字符

^ : 行开头/告诉正则表达式字符不能匹配后面跟着的字符

else if($(this).is(".sort-numeric")){
	findSortKey = function($cell){					
		var key = parseFloat($cell.text().replace(/^[^\d.]*/," "));
		return isNaN(key) ? 0 : key;
	};
}

4 .用高亮显示排过序的项

$table.find('td').removeClass("sorted").filter(":nth-child(" + (column+1) + ")").addClass("sorted");

B .分页

currentPage表示当前页,numperpage表示一页显示的条数。

jquery的方法

:lt(index):匹配所有小于给定索引值的元素
:gt(index):匹配所有小于给定索引值的元素

构建一个repaginate方法,让大于当前页第一条和小于当前页最后一条的值隐藏。注意索引是从“0”开始

$table.bind("repaginate",function(){				
	$table.find("tbody tr").show();				
	$("tbody tr:lt(" + currentPage * numperpage + ")").hide().end();				
	$("tbody tr:gt(" + ((currentPage + 1) * numperpage -1) + ")").hide().end();			
});
40
0
分享到:
评论
8 楼 guji528 2009-08-17  
在客户端使用JavaScript排序的好处就是减轻服务器的压力,不过页面的代码量却变多了。这个功能很实用,有空试试看。
7 楼 gaoqiao0313 2009-07-29  
刚刚试了下,中文排序,有点问题
6 楼 343101272 2009-07-03  
谢谢,刚好用到
5 楼 pure1202 2009-03-20  
我喜欢这个
4 楼 曾经地迷茫 2009-01-08  
排序+分页 很好 
3 楼 nopain_nogain 2008-12-23  
很好,很强大.
2 楼 ice-cream 2008-12-09  
饭特稀 写道

有点bug~点标题栏排序~点击后标题栏就不显示了~变白的了~

刚看了下确实有你说的这个bug,平时都用firefox的,你说的问题是ie下的,是css问题,已经改好了,
1 楼 饭特稀 2008-12-09  
有点bug~点标题栏排序~点击后标题栏就不显示了~变白的了~

相关推荐

    jquery+ajax分页

    **jQuery + AJAX 分页技术详解** ...在实际项目中,根据需求可能还需要考虑更多细节,如分页大小的调整、搜索和排序功能的集成等。总的来说,jQuery与AJAX的结合极大地提高了Web应用的交互性和效率。

    wijmo+jquery+jqueryui+jqgrid 最新开发包以及demo

    它支持分页、排序、搜索、过滤和编辑等功能,是处理表格数据的强大工具。虽然在标题中提到,但在提供的文件列表中并未直接包含jqGrid的相关文件,通常它会作为一个单独的JavaScript文件引入到项目中。 结合这些库,...

    jQuery+Ajax+PHP无刷新分页

    **jQuery + Ajax + PHP无刷新分页技术详解** 在现代Web开发中,用户界面的响应性和用户体验至关重要。无刷新分页是一种技术,它允许用户在浏览网页内容时,无需加载整个页面就能切换到不同的页面,提高了浏览效率。...

    jquery 无刷新分页排序

    **jQuery无刷新分页排序**是一种高效的网页交互技术,它结合了Ajax和jQuery库的优势,为用户提供了流畅的浏览体验,无需每次操作都重新加载整个页面。这种技术在大数据量的展示场景中尤为常见,如在线表格、论坛、...

    asp +JqueryAjax+access 无刷新分页

    【ASP + JqueryAjax + Access 无刷新分页】是一种网页开发技术,它结合了ASP(Active Server Pages)后端处理、JqueryAjax前端异步通信以及Access数据库的数据存储,以实现网页数据的动态加载,无需整个页面刷新,...

    jQuery分页,纯AJAX分页

    jquery无刷新分页、排序 利用jquery实现的ajax无刷新分页以及排序,支持多种格式无刷新更换,数据库采用的是Sql2000自带的NorthWind数据库 数据库控制使用的是SqlHelper

    jquery 实现排序和分页

    本文将深入探讨如何使用 jQuery 来实现排序和分页功能,这两个功能在数据展示和用户交互中非常常见,特别是对于表格数据。 **一、jQuery 排序** 1. **jQuery Tablesorter 插件**: `jquery.tablesorter` 是一个...

    jQuery分页排序插件.zip

    jQuery分页排序插件是前端开发中常用的工具,它极大地提升了网页数据展示的用户体验,尤其在处理大量数据时。这款插件允许用户对HTML结构进行排序、分页和过滤,无需复杂的后端处理,减轻了服务器负担,同时也提高了...

    jQuery实现的分页排序Table组件

    在网页开发中,数据展示是不可或缺的一部分,而jQuery实现的分页排序Table组件则为开发者提供了高效、灵活的方式来处理大量数据的展示问题。这个组件通常用于动态加载和组织表格数据,使得用户可以轻松浏览和操作...

    9种jquery纯页面分页排序

    - `JQuery排序分页a`:这是一个结合了排序和分页功能的插件,用户可以对数据显示进行个性化定制,如每页显示条目数、跳转页码等。 - `jqueryPaginga`:这个插件提供简洁的分页样式和易于使用的API,支持自定义样式...

    jquery排序分页分析理解

    **jQuery排序与分页理解** 在Web开发中,数据的排序和分页是常见的需求,尤其是在处理大量数据时。jQuery,作为一个广泛使用的JavaScript库,提供了方便的API来帮助开发者实现这些功能。这篇博客将深入探讨如何使用...

    jquery tablesorter,表格排序带分页

    《jQuery TableSorter:实现高效表格排序与分页功能》 在网页开发中,数据的展示往往离不开表格,而对表格进行排序和分页则能极大地提升用户体验。jQuery TableSorter是一款强大的JavaScript插件,它使得表格排序和...

    jquery.tablesorter.js +排序、分页、ajax demo

    jQuery的tablesorter插件为开发者提供了一种便捷的方式,使得表格数据可以实现动态排序、分页以及与服务器端的数据交互,大大提升了用户体验。本文将围绕"jquery.tablesorter.js +排序、分页、ajax demo"这一主题,...

    jQuery动态表格数据分页检索排序代码

    这个项目“jQuery动态表格数据分页检索排序代码”提供了一个纯前端实现的解决方案,无需服务器端的支持,使得用户可以更加便捷地浏览和管理大量数据。 jQuery是一个流行的JavaScript库,它简化了DOM操作、事件处理...

    jQuery实现Table分页跳转

    3. **排序与搜索**:结合jQuery或其他JavaScript库(如Bootstrap DataTables),可以实现分页的同时支持表格的排序和搜索功能。 四、优化与注意事项 - 考虑到用户体验,分页请求应尽可能快速,避免用户等待。 - 为...

    仿jquery.dataTables的分页(查询+排序)

    仿jquery.dataTables的分页(查询+排序),jquery插件式开发简单示例。

    js分页+列表排序+属性显示

    "js分页+列表排序+属性显示"这一技术组合,旨在提供一种无需页面刷新就能实现数据动态加载、排序以及特定属性显示的功能,提升用户体验。以下是关于这些知识点的详细说明: 1. **分页(Pagination)**: 分页是一...

    JqueryAPI +easyUI+demo

    5. **插件扩展(Plugin Extensions)**:EasyUI 还允许用户或第三方开发者创建插件,扩展其功能,如分页插件、拖拽排序插件等。 **示例应用** 在 "JqueryAPI +easyUI+demo" 中,你可能找到使用jQuery和EasyUI开发...

    基于jquery的表格筛选,排序,分页js

    本主题关注的是如何利用jQuery实现表格的数据筛选、排序和分页功能,这些都是网页数据展示中常见的需求。 一、jQuery表格筛选 表格筛选功能允许用户通过输入关键词快速查找表格中的特定数据。在jQuery中,可以使用`...

Global site tag (gtag.js) - Google Analytics