⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jquery.tablesorter.js

📁 使用JSP和Java Bean来构建一个网上书店。本章介绍的例子可以分成两大部分
💻 JS
📖 第 1 页 / 共 2 页
字号:
			function multisort(table,sortList,cache) {								if(table.config.debug) { var sortTime = new Date(); }								var dynamicExp = "var sortWrapper = function(a,b) {", l = sortList.length;									for(var i=0; i < l; i++) {										var c = sortList[i][0];					var order = sortList[i][1];					var s = (getCachedSortType(table.config.parsers,c) == "text") ? ((order == 0) ? "sortText" : "sortTextDesc") : ((order == 0) ? "sortNumeric" : "sortNumericDesc");										var e = "e" + i;										dynamicExp += "var " + e + " = " + s + "(a[" + c + "],b[" + c + "]); ";					dynamicExp += "if(" + e + ") { return " + e + "; } ";					dynamicExp += "else { ";				}								// if value is the same keep orignal order					var orgOrderCol = cache.normalized[0].length - 1;				dynamicExp += "return a[" + orgOrderCol + "]-b[" + orgOrderCol + "];";										for(var i=0; i < l; i++) {					dynamicExp += "}; ";				}								dynamicExp += "return 0; ";					dynamicExp += "}; ";									eval(dynamicExp);								cache.normalized.sort(sortWrapper);								if(table.config.debug) { benchmark("Sorting on " + sortList.toString() + " and dir " + order+ " time:", sortTime); }								return cache;			};						function sortText(a,b) {				return ((a < b) ? -1 : ((a > b) ? 1 : 0));			};						function sortTextDesc(a,b) {				return ((b < a) ? -1 : ((b > a) ? 1 : 0));			};					 		function sortNumeric(a,b) {				return a-b;			};						function sortNumericDesc(a,b) {				return b-a;			};						function getCachedSortType(parsers,i) {				return parsers[i].type;			};						/* public methods */			this.construct = function(settings) {				return this.each(function() {										if(!this.tHead || !this.tBodies) return;										var $this, $document,$headers, cache, config, shiftDown = 0, sortOrder;										this.config = {};										config = $.extend(this.config, $.tablesorter.defaults, settings);										// store common expression for speed										$this = $(this);										// build headers					$headers = buildHeaders(this);										// try to auto detect column type, and store in tables config					this.config.parsers = buildParserCache(this,$headers);															// build the cache for the tbody cells					cache = buildCache(this);										// get the css class names, could be done else where.					var sortCSS = [config.cssDesc,config.cssAsc];										// fixate columns if the users supplies the fixedWidth option					fixColumnWidth(this);										// apply event handling to headers					// this is to big, perhaps break it out?					$headers.click(function(e) {												$this.trigger("sortStart");												var totalRows = ($this[0].tBodies[0] && $this[0].tBodies[0].rows.length) || 0;												if(!this.sortDisabled && totalRows > 0) {																					// store exp, for speed							var $cell = $(this);								// get current column index							var i = this.column;														// get current column sort order							this.order = this.count++ % 2;														// user only whants to sort on one column							if(!e[config.sortMultiSortKey]) {																// flush the sort list								config.sortList = [];																if(config.sortForce != null) {									var a = config.sortForce; 									for(var j=0; j < a.length; j++) {										if(a[j][0] != i) {											config.sortList.push(a[j]);										}									}								}																// add column to sort list								config.sortList.push([i,this.order]);														// multi column sorting							} else {								// the user has clicked on an all ready sortet column.								if(isValueInArray(i,config.sortList)) {	 																		// revers the sorting direction for all tables.									for(var j=0; j < config.sortList.length; j++) {										var s = config.sortList[j], o = config.headerList[s[0]];										if(s[0] == i) {											o.count = s[1];											o.count++;											s[1] = o.count % 2;										}									}									} else {									// add column to sort list array									config.sortList.push([i,this.order]);								}							};							setTimeout(function() {								//set css for headers								setHeadersCss($this[0],$headers,config.sortList,sortCSS);								appendToTable($this[0],multisort($this[0],config.sortList,cache));							},1);							// stop normal event by returning false							return false;						}					// cancel selection						}).mousedown(function() {						if(config.cancelSelection) {							this.onselectstart = function() {return false};							return false;						}					});										// apply easy methods that trigger binded events					$this.bind("update",function() {												// rebuild parsers.						this.config.parsers = buildParserCache(this,$headers);												// rebuild the cache map						cache = buildCache(this);											}).bind("sorton",function(e,list) {												$(this).trigger("sortStart");												config.sortList = list;												// update and store the sortlist						var sortList = config.sortList;												// update header count index						updateHeaderSortCount(this,sortList);												//set css for headers						setHeadersCss(this,$headers,sortList,sortCSS);																		// sort the table and append it to the dom						appendToTable(this,multisort(this,sortList,cache));					}).bind("appendCache",function() {												appendToTable(this,cache);										}).bind("applyWidgetId",function(e,id) {												getWidgetById(id).format(this);											}).bind("applyWidgets",function() {						// apply widgets						applyWidget(this);					});										if($.metadata && ($(this).metadata() && $(this).metadata().sortlist)) {						config.sortList = $(this).metadata().sortlist;					}					// if user has supplied a sort list to constructor.					if(config.sortList.length > 0) {						$this.trigger("sorton",[config.sortList]);						}										// apply widgets					applyWidget(this);				});			};						this.addParser = function(parser) {				var l = parsers.length, a = true;				for(var i=0; i < l; i++) {					if(parsers[i].id.toLowerCase() == parser.id.toLowerCase()) {						a = false;					}				}				if(a) { parsers.push(parser); };			};						this.addWidget = function(widget) {				widgets.push(widget);			};						this.formatFloat = function(s) {				var i = parseFloat(s);				return (isNaN(i)) ? 0 : i;			};			this.formatInt = function(s) {				var i = parseInt(s);				return (isNaN(i)) ? 0 : i;			};						this.isDigit = function(s,config) {				var DECIMAL = '\\' + config.decimal;				var exp = '/(^[+]?0(' + DECIMAL +'0+)?$)|(^([-+]?[1-9][0-9]*)$)|(^([-+]?((0?|[1-9][0-9]*)' + DECIMAL +'(0*[1-9][0-9]*)))$)|(^[-+]?[1-9]+[0-9]*' + DECIMAL +'0+$)/';				return RegExp(exp).test($.trim(s));			};						this.clearTableBody = function(table) {				if($.browser.msie) {					function empty() {						while ( this.firstChild ) this.removeChild( this.firstChild );					}					empty.apply(table.tBodies[0]);				} else {					table.tBodies[0].innerHTML = "";				}			};		}	});		// extend plugin scope	$.fn.extend({        tablesorter: $.tablesorter.construct	});		var ts = $.tablesorter;		// add default parsers	ts.addParser({		id: "text",		is: function(s) {			return true;		},		format: function(s) {			return $.trim(s.toLowerCase());		},		type: "text"	});		ts.addParser({		id: "digit",		is: function(s,table) {			var c = table.config;			return $.tablesorter.isDigit(s,c);		},		format: function(s) {			return $.tablesorter.formatFloat(s);		},		type: "numeric"	});		ts.addParser({		id: "currency",		is: function(s) {			return /^[£$€?.]/.test(s);		},		format: function(s) {			return $.tablesorter.formatFloat(s.replace(new RegExp(/[^0-9.]/g),""));		},		type: "numeric"	});		ts.addParser({		id: "ipAddress",		is: function(s) {			return /^\d{2,3}[\.]\d{2,3}[\.]\d{2,3}[\.]\d{2,3}$/.test(s);		},		format: function(s) {			var a = s.split("."), r = "", l = a.length;			for(var i = 0; i < l; i++) {				var item = a[i];			   	if(item.length == 2) {					r += "0" + item;			   	} else {					r += item;			   	}			}			return $.tablesorter.formatFloat(r);		},		type: "numeric"	});		ts.addParser({		id: "url",		is: function(s) {			return /^(https?|ftp|file):\/\/$/.test(s);		},		format: function(s) {			return jQuery.trim(s.replace(new RegExp(/(https?|ftp|file):\/\//),''));		},		type: "text"	});		ts.addParser({		id: "isoDate",		is: function(s) {			return /^\d{4}[\/-]\d{1,2}[\/-]\d{1,2}$/.test(s);		},		format: function(s) {			return $.tablesorter.formatFloat((s != "") ? new Date(s.replace(new RegExp(/-/g),"/")).getTime() : "0");		},		type: "numeric"	});			ts.addParser({		id: "percent",		is: function(s) { 			return /\%$/.test($.trim(s));		},		format: function(s) {			return $.tablesorter.formatFloat(s.replace(new RegExp(/%/g),""));		},		type: "numeric"	});	ts.addParser({		id: "usLongDate",		is: function(s) {			return s.match(new RegExp(/^[A-Za-z]{3,10}\.? [0-9]{1,2}, ([0-9]{4}|'?[0-9]{2}) (([0-2]?[0-9]:[0-5][0-9])|([0-1]?[0-9]:[0-5][0-9]\s(AM|PM)))$/));		},		format: function(s) {			return $.tablesorter.formatFloat(new Date(s).getTime());		},		type: "numeric"	});	ts.addParser({		id: "shortDate",		is: function(s) {			return /\d{1,2}[\/\-]\d{1,2}[\/\-]\d{2,4}/.test(s);		},		format: function(s,table) {			var c = table.config;			s = s.replace(/\-/g,"/");			if(c.dateFormat == "us") {				// reformat the string in ISO format				s = s.replace(/(\d{1,2})[\/\-](\d{1,2})[\/\-](\d{4})/, "$3/$1/$2");			} else if(c.dateFormat == "uk") {				//reformat the string in ISO format				s = s.replace(/(\d{1,2})[\/\-](\d{1,2})[\/\-](\d{4})/, "$3/$2/$1");			} else if(c.dateFormat == "dd/mm/yy" || c.dateFormat == "dd-mm-yy") {				s = s.replace(/(\d{1,2})[\/\-](\d{1,2})[\/\-](\d{2})/, "$1/$2/$3");				}			return $.tablesorter.formatFloat(new Date(s).getTime());		},		type: "numeric"	});	ts.addParser({	    id: "time",	    is: function(s) {	        return /^(([0-2]?[0-9]:[0-5][0-9])|([0-1]?[0-9]:[0-5][0-9]\s(am|pm)))$/.test(s);	    },	    format: function(s) {	        return $.tablesorter.formatFloat(new Date("2000/01/01 " + s).getTime());	    },	  type: "numeric"	});			ts.addParser({	    id: "metadata",	    is: function(s) {	        return false;	    },	    format: function(s,table,cell) {			var c = table.config, p = (!c.parserMetadataName) ? 'sortValue' : c.parserMetadataName;	        return $(cell).metadata()[p];	    },	  type: "numeric"	});		// add default widgets	ts.addWidget({		id: "zebra",		format: function(table) {			if(table.config.debug) { var time = new Date(); }			$("tr:visible",table.tBodies[0])	        .filter(':even')	        .removeClass(table.config.widgetZebra.css[1]).addClass(table.config.widgetZebra.css[0])	        .end().filter(':odd')	        .removeClass(table.config.widgetZebra.css[0]).addClass(table.config.widgetZebra.css[1]);			if(table.config.debug) { $.tablesorter.benchmark("Applying Zebra widget", time); }		}	});	})(jQuery);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -