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

📄 filteringtable.js

📁 struts hibernet spring
💻 JS
📖 第 1 页 / 共 2 页
字号:
				var source=e.target;		var row=dojo.html.getParentByType(source,"tr");		var cellTag="td";		if(row.getElementsByTagName(cellTag).length==0){			cellTag="th";		}		var headers=row.getElementsByTagName(cellTag);		var header=dojo.html.getParentByType(source,cellTag);				for(var i=0; i<headers.length; i++){			dojo.html.setClass(headers[i], this.headerClass);			if(headers[i]==header){				if(this.sortInformation[0].index != i){					this.sortInformation.unshift({ 						index:i, 						direction:0					});				} else {					this.sortInformation[0] = {						index:i,						direction:(~this.sortInformation[0].direction)&1					};				}			}		}		this.sortInformation.length = Math.min(this.sortInformation.length, this.maxSortable);		for(var i=0; i<this.sortInformation.length; i++){			var idx=this.sortInformation[i].index;			var dir=(~this.sortInformation[i].direction)&1;			dojo.html.setClass(headers[idx], dir==0?this.headerDownClass:this.headerUpClass);		}		this.render();	},	onFilter: function(){		//	summary		//	show or hide rows based on the parameters of the passed filter.	},	//	Filtering methods	_defaultFilter: function(/* Object */obj){		//	summary		//	Always return true as the result of the default filter.		return true;	},	setFilter: function(/* string */field, /* function */fn){		//	summary		//	set a filtering function on the passed field.		for(var i=0; i<this.columns.length; i++){			if(this.columns[i].getField() == field){				this.columns[i].filterFunction=fn;				break;			}		}		this.applyFilters();	},	setFilterByIndex: function(/* number */idx, /* function */fn){		//	summary		//	set a filtering function on the passed column index.		this.columns[idx].filterFunction=fn;		this.applyFilters();	},	clearFilter: function(/* string */field){		//	summary		//	clear a filtering function on the passed field.		for(var i=0; i<this.columns.length; i++){			if(this.columns[i].getField() == field){				this.columns[i].filterFunction=this._defaultFilter;				break;			}		}		this.applyFilters();	}, 	clearFilterByIndex: function(/* number */idx){		//	summary		//	clear a filtering function on the passed column index.		this.columns[idx].filterFunction=this._defaultFilter;		this.applyFilters();	}, 	clearFilters: function(){		//	summary		//	clears all filters.		for(var i=0; i<this.columns.length; i++){			this.columns[i].filterFunction=this._defaultFilter;		}		//	we'll do the clear manually, it will be faster.		var rows=this.domNode.tBodies[0].rows;		for(var i=0; i<rows.length; i++){			rows[i].style.display="";			if(this.alternateRows){				dojo.html[((i % 2 == 1)?"addClass":"removeClass")](rows[i], this.rowAlternateClass);			}		}		this.onFilter();	},	applyFilters: function(){		//	summary		//	apply all filters to the table.		var alt=0;		var rows=this.domNode.tBodies[0].rows;		for(var i=0; i<rows.length; i++){			var b=true;			var row=rows[i];			for(var j=0; j<this.columns.length; j++){				var value = this.store.getField(this.getDataByRow(row), this.columns[j].getField());				if(this.columns[j].getType() == Date && value != null && !value.getYear){					value = new Date(value);				}				if(!this.columns[j].filterFunction(value)){					b=false;					break;				}			}			row.style.display=(b?"":"none");			if(b && this.alternateRows){				dojo.html[((alt++ % 2 == 1)?"addClass":"removeClass")](row, this.rowAlternateClass);			}		}		this.onFilter();	},	//	sorting functionality	createSorter: function(/* array */info){		//	summary		//	creates a custom function to be used for sorting.		var self=this;		var sortFunctions=[];	//	our function stack.			function createSortFunction(fieldIndex, dir){			var meta=self.columns[fieldIndex];			var field=meta.getField();			return function(rowA, rowB){				if(dojo.html.hasAttribute(rowA,"emptyRow") || dojo.html.hasAttribute(rowB,"emptyRow")){					return -1;				}				//	TODO: check for markup and compare by rendered text.				var a = self.store.getField(self.getDataByRow(rowA), field);				var b = self.store.getField(self.getDataByRow(rowB), field);				var ret = 0;				if(a > b) ret = 1;				if(a < b) ret = -1;				return dir * ret;			}		}		var current=0;		var max = Math.min(info.length, this.maxSortable, this.columns.length);		while(current < max){			var direction = (info[current].direction == 0) ? 1 : -1;			sortFunctions.push(				createSortFunction(info[current].index, direction)			);			current++;		}		return function(rowA, rowB){			var idx=0;			while(idx < sortFunctions.length){				var ret = sortFunctions[idx++](rowA, rowB);				if(ret != 0) return ret;			}			//	if we got here then we must be equal.			return 0; 			};	//	function	},	//	rendering	createRow: function(/* object */obj){		//	summary		//	Create an HTML row based on the passed object		var row=document.createElement("tr");		dojo.html.disableSelection(row);		if(obj.key != null){			row.setAttribute("value", obj.key);		}		for(var j=0; j<this.columns.length; j++){			var cell=document.createElement("td");			cell.setAttribute("align", this.columns[j].align);			cell.setAttribute("valign", this.columns[j].valign);			dojo.html.disableSelection(cell);			var val = this.store.getField(obj.src, this.columns[j].getField());			if(typeof(val)=="undefined"){				val="";			}			this.fillCell(cell, this.columns[j], val);			row.appendChild(cell);		}		return row;	//	HTMLTableRow	},	fillCell: function(/* HTMLTableCell */cell, /* object */meta, /* object */val){		//	summary		//	Fill the passed cell with value, based on the passed meta object.		if(meta.sortType=="__markup__"){			cell.innerHTML=val;		} else {			if(meta.getType()==Date) {				val=new Date(val);				if(!isNaN(val)){					var format = this.defaultDateFormat;					if(meta.format){						format = meta.format;					}					cell.innerHTML = dojo.date.strftime(val, format);				} else {					cell.innerHTML = val;				}			} else if ("Number number int Integer float Float".indexOf(meta.getType())>-1){				//	TODO: number formatting				if(val.length == 0){					val="0";				}				var n = parseFloat(val, 10) + "";				//	TODO: numeric formatting + rounding :)				if(n.indexOf(".")>-1){					n = dojo.math.round(parseFloat(val,10),2);				}				cell.innerHTML = n;			}else{				cell.innerHTML = val;			}		}	},	prefill: function(){		//	summary		//	if there's no data in the table, then prefill it with this.minRows.		this.isInitialized = false;		var body = this.domNode.tBodies[0];		while (body.childNodes.length > 0){			body.removeChild(body.childNodes[0]);		}				if(this.minRows>0){			for(var i=0; i < this.minRows; i++){				var row = document.createElement("tr");				if(this.alternateRows){					dojo.html[((i % 2 == 1)?"addClass":"removeClass")](row, this.rowAlternateClass);				}				row.setAttribute("emptyRow","true");				for(var j=0; j<this.columns.length; j++){					var cell = document.createElement("td");					cell.innerHTML = "&nbsp;";					row.appendChild(cell);				}				body.appendChild(row);			}		}	},	init: function(){		//	summary		//	initializes the table of data		this.isInitialized=false;		//	if there is no thead, create it now.		var head=this.domNode.getElementsByTagName("thead")[0];		if(head.getElementsByTagName("tr").length == 0){			//	render the column code.			var row=document.createElement("tr");			for(var i=0; i<this.columns.length; i++){				var cell=document.createElement("td");				cell.setAttribute("align", this.columns[i].align);				cell.setAttribute("valign", this.columns[i].valign);				dojo.html.disableSelection(cell);				cell.innerHTML=this.columns[i].label;				row.appendChild(cell);				//	attach the events.				if(!this.columns[i].noSort){					dojo.event.connect(cell, "onclick", this, "onSort");				}			}			dojo.html.prependChild(row, head);		}				if(this.store.get().length == 0){			return false;		}		var idx=this.domNode.tBodies[0].rows.length;		if(!idx || idx==0 || this.domNode.tBodies[0].rows[0].getAttribute("emptyRow")=="true"){			idx = 0;			var body = this.domNode.tBodies[0];			while(body.childNodes.length>0){				body.removeChild(body.childNodes[0]);			}			var data = this.store.get();			for(var i=0; i<data.length; i++){				var row = this.createRow(data[i]);				dojo.event.connect(row, "onclick", this, "onSelect");				body.appendChild(row);				idx++;			}		}		//	add empty rows		if(this.minRows > 0 && idx < this.minRows){			idx = this.minRows - idx;			for(var i=0; i<idx; i++){				row=document.createElement("tr");				row.setAttribute("emptyRow","true");				for(var j=0; j<this.columns.length; j++){					cell=document.createElement("td");					cell.innerHTML="&nbsp;";					row.appendChild(cell);				}				body.appendChild(row);			}		}		//	last but not least, show any columns that have sorting already on them.		var row=this.domNode.getElementsByTagName("thead")[0].rows[0];		var cellTag="td";		if(row.getElementsByTagName(cellTag).length==0) cellTag="th";		var headers=row.getElementsByTagName(cellTag);		for(var i=0; i<headers.length; i++){			dojo.html.setClass(headers[i], this.headerClass);		}		for(var i=0; i<this.sortInformation.length; i++){			var idx=this.sortInformation[i].index;			var dir=(~this.sortInformation[i].direction)&1;			dojo.html.setClass(headers[idx], dir==0?this.headerDownClass:this.headerUpClass);		}		this.isInitialized=true;		return this.isInitialized;	},	render: function(){		//	summary		//	Renders the actual table data.	/*	The method that should be called once underlying changes	 *	are made, including sorting, filtering, data changes.	 *	Rendering the selections themselves are a different method,	 *	which render() will call as the last step.	 ****************************************************************/		if(!this.isInitialized){			var b = this.init();			if(!b){				this.prefill();				return;			}		}				//	do the sort		var rows=[];		var body=this.domNode.tBodies[0];		var emptyRowIdx=-1;		for(var i=0; i<body.rows.length; i++){			rows.push(body.rows[i]);		}		//	build the sorting function, and do the sorting.		var sortFunction = this.createSorter(this.sortInformation);		if(sortFunction){			rows.sort(sortFunction);		}		//	append the rows without killing them, this should help with the HTML problems.		for(var i=0; i<rows.length; i++){			if(this.alternateRows){				dojo.html[((i%2==1)?"addClass":"removeClass")](rows[i], this.rowAlternateClass);			}			dojo.html[(this.isRowSelected(body.rows[i])?"addClass":"removeClass")](body.rows[i], this.rowSelectedClass);			body.appendChild(rows[i]);		}	},	renderSelections: function(){		//	summary		//	Render all selected objects using CSS.		var body=this.domNode.tBodies[0];		for(var i=0; i<body.rows.length; i++){			dojo.html[(this.isRowSelected(body.rows[i])?"addClass":"removeClass")](body.rows[i], this.rowSelectedClass);		}	},	//	widget lifetime handlers	initialize: function(){ 		//	summary		//	Initializes the widget.		var self=this;		//	connect up binding listeners here.		dojo.event.connect(this.store, "onSetData", function(){			self.store.forEach(function(element){				element.isSelected = false;			});			self.isInitialized=false;			var body = self.domNode.tBodies[0];			if(body){				while(body.childNodes.length>0){					body.removeChild(body.childNodes[0]);				}			}			self.render();		});		dojo.event.connect(this.store, "onClearData", function(){			self.render();		});		dojo.event.connect(this.store, "onAddData", function(addedObject){			var row=self.createRow(addedObject);			dojo.event.connect(row, "onclick", self, "onSelect");			self.domNode.tBodies[0].appendChild(row);			self.render();		});		dojo.event.connect(this.store, "onAddDataRange", function(arr){			for(var i=0; i<arr.length; i++){				arr[i].isSelected=false;				var row=self.createRow(arr[i]);				dojo.event.connect(row, "onclick", self, "onSelect");				self.domNode.tBodies[0].appendChild(row);			};			self.render();		});		dojo.event.connect(this.store, "onRemoveData", function(removedObject){			var rows = self.domNode.tBodies[0].rows;			for(var i=0; i<rows.length; i++){				if(self.getDataByRow(rows[i]) == removedObject.src){					rows[i].parentNode.removeChild(rows[i]);					break;				}			}			self.render();		});		dojo.event.connect(this.store, "onUpdateField", function(obj, fieldPath, val){			var row = self.getRow(obj);			var idx = self.getColumnIndex(fieldPath);			if(row && row.cells[idx] && self.columns[idx]){				self.fillCell(row.cells[idx], self.columns[idx], val);			}		});	},	postCreate: function(){		//	summary		//	finish widget initialization.		this.store.keyField = this.valueField;		if(this.domNode){			//	start by making sure domNode is a table element;			if(this.domNode.nodeName.toLowerCase() != "table"){			}			//	see if there is columns set up already			if(this.domNode.getElementsByTagName("thead")[0]){				var head=this.domNode.getElementsByTagName("thead")[0];				if(this.headClass.length > 0){					head.className = this.headClass;				}				dojo.html.disableSelection(this.domNode);				this.parseMetadata(head);				var header="td";				if(head.getElementsByTagName(header).length==0){					header="th";				}				var headers = head.getElementsByTagName(header);				for(var i=0; i<headers.length; i++){					if(!this.columns[i].noSort){						dojo.event.connect(headers[i], "onclick", this, "onSort");					}				}			} else {				this.domNode.appendChild(document.createElement("thead"));			}			// if the table doesn't have a tbody already, add one and grab a reference to it			if (this.domNode.tBodies.length < 1) {				var body = document.createElement("tbody");				this.domNode.appendChild(body);			} else {				var body = this.domNode.tBodies[0];			}			if (this.tbodyClass.length > 0){				body.className = this.tbodyClass;			}			this.parseData(body);		}	}});

⌨️ 快捷键说明

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