`

JQuery排序+分页(转帖)

阅读更多
Js代码 复制代码
<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库件里

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()方法

Js代码 复制代码

 

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的取值写在一起:

Js代码 复制代码

 

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。

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

 

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

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

\d : [0-9] 数字

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

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

Js代码 复制代码

 

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

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

Js代码 复制代码

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

B .分页

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

jquery的方法

Js代码 复制代码
: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();   
});
分享到:
评论

相关推荐

    jQuery全能权威指南:jQuery Core+jQuery Plugin+jQuery UI+jQuery Mobile 源码

    、CSS和JavaScript知识的开发者,内容覆盖了jQuery知识体系的全部内容,包括jQuery Core、jQuery Plugin 、jQuery UI、jQuery Mobile以及大量第三方的插件库和2800多个应用jQuery技术的网页参考。

    四种jQuery+bootstrap分页效果插件.rar

    这个"四种jQuery+bootstrap分页效果插件.rar"压缩包文件包含了四个不同的jQuery和Bootstrap分页插件,每个都有其独特的特性和应用场景。 首先,我们来了解一下jQuery。jQuery是一个轻量级、高性能的JavaScript库,...

    基于bootstrap+jQuery的前端分页

    "基于bootstrap+jQuery的前端分页"是一个利用这两种流行的技术实现的分页解决方案。Bootstrap是Twitter推出的一个用于前端开发的开源工具包,它提供了一套响应式布局、移动设备优先的WEB设计框架,使得开发者能够...

    jquery+ajax分页

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

    asp.net+jquery显示数据+分页

    在"asp.net+jquery显示数据+分页"这个主题中,我们将深入探讨如何利用这两种技术来展示大量的数据并实现分页功能。 首先,ASP.NET是微软推出的一种服务器端脚本框架,用于构建动态Web应用。它提供了丰富的服务器...

    jquery+ajax+.net动态分页

    本示例是关于如何利用jQuery、Ajax和.NET技术实现后台动态分页的一个实例,结合了`jquery.pageFoot.js`插件来实现这一功能。 首先,jQuery是一个轻量级的JavaScript库,它简化了HTML文档遍历、事件处理、动画以及...

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

    标题中的“wijmo+jquery+jqueryui+jqgrid”涵盖了四个关键的JavaScript库,它们在Web开发中扮演着重要角色,特别是对于构建交互式的、功能丰富的用户界面。下面将详细介绍这些库及其应用。 1. **jQuery**: jQuery是...

    Servlet+json+js(jquery)+jsp实现分页

    本项目使用Servlet、JSON、JavaScript(JQuery)和JSP技术实现了一个简单易懂、功能完善的分页解决方案。 **Servlet** 是Java服务器端编程的基础,它负责处理HTTP请求和响应。在分页应用中,Servlet主要负责接收...

    asp.net+jquery+json+分页

    本项目主要探讨了如何在ASP.NET环境中结合jQuery和JSON实现高效、动态的分页功能。以下是关于这个主题的详细讲解。 首先,ASP.NET是微软提供的一个用于构建Web应用程序的框架,它提供了丰富的服务器控件和强大的...

    jQuery+Ajax+PHP无刷新分页

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

    jquery 无刷新分页排序

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

    jquery+Vue分页器

    **jQuery + Vue 分页器详解** 在Web开发中,数据量大时,为了提高用户体验,分页是一个必不可少的功能。本文将详细介绍如何结合jQuery和Vue.js实现一个简单易用且具有Bootstrap风格的分页器。 首先,jQuery是一个...

    asp +JqueryAjax+access 无刷新分页

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

    .NET+jQuery 实现局部刷新+分页+高亮显示搜索内容

    在.NET和jQuery技术栈中,实现局部刷新、分页以及高亮显示搜索内容是一项常见的功能需求,尤其在构建数据密集型Web应用时。这个功能可以让用户在不重新加载整个页面的情况下获取新数据,提高用户体验,并且能快速...

    jQuery分页,纯AJAX分页

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

    jquery 实现排序和分页

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

    jquery+mysql+php无刷新分页

    ### 三、AJAX与jQuery无刷新分页 无刷新分页是通过AJAX技术实现的,用户在点击分页链接时,页面不会完全刷新,而是通过发送异步请求获取新的数据。jQuery提供了方便的`$.ajax()`或`$.get()`方法来实现这一功能。以下...

    JQuery + Struts 分页

    1. **JQuery分页插件**:JQuery有许多现成的分页插件,如jQuery Pagination、Bootstrap Paginator等。这些插件通常提供了丰富的配置选项和自定义样式,可以快速实现分页功能。例如,通过调用插件的API,设置每页显示...

Global site tag (gtag.js) - Google Analytics