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

📄 sunrise_tablesort.js

📁 java的搜索引擎的创建与索引工具
💻 JS
字号:
/** * @author ghost */
(function(){		//tbName待排序的表名start起始tr下标默认1,end结束tr下标默认0   	SunRise.TableSort =function(tbName,start,end){   	    this.tbName=tbName;//表名  	    this.table=document.getElementById(tbName);//表对象	    this.start=start==null?1:start;//起始tr如果值为1则第一行不参与排序   	    this.end=end==null?0:end;//结束tr如果值为2则最后两行不参与排序   	    this.heads=this.table.rows[0].cells;   	    this.spanSrc=document.createElement("span");   	    this.spanSrc.innerHTML="▼";//占位用   	}  		SunRise.TableSort.prototype = {				//指定待排序的列cellIdx列号下标,desc如果列表已经有序true为倒序false为正序,null为无序,type类型支持类型有DATE,NUMBER,STRING_EN,STRING_CH		bindCell : function(cellIdx,type,desc){   		    var c=this.heads[cellIdx],o=this;   		    c.style.cursor='pointer';   		    c.onclick=function(){		        o.sortCell(this,type);    		        if(o.onclickExt!=null)o.onclickExt(this);//执行扩展的onclickExt事件   		    }		    var f=this.spanSrc.cloneNode(true);   		    f.style.visibility='hidden';   		    c.updateSymbol=function(){ if(c.desc) f.innerHTML="▼";else f.innerHTML="▲";}   		    c.desc=desc;   		    if(c.desc!=null)c.updateSymbol();   		    c.onmouseover=function(){if(c.desc!=null)f.style.visibility='visible';}   		    c.onmouseout=function(){f.style.visibility='hidden';}   		    c.appendChild(f);   		    c.style.textIndent=f.offsetWidth;   		},				//核心排序方法,采用冒泡排序,使用dom交换数据,不影响内存中cell对象的状态 		sortCell : function(cell,type){   		    var ips = this.table.getElementsByTagName("INPUT"),cks = [];//排序字段 解决交换tr时checkbox的IE bug   		    for(var i=0; i < ips.length; i++){if(ips[i].type == "checkbox") cks.push(ips[i], ips[i].checked);}   		    if(cell.desc==null) cell.desc=false;else cell.desc=!cell.desc;   		    var funcName='CMP_'+type;//根据类型匹配算法的函数名称   		    if(this[funcName]==null){alert("类型错误,合法的类型为DATE,NUMBER,STRING_EN,STRING_CH");return ;}   		    for (var i = this.start,cIdx=cell.cellIndex,rows=this.table.rows,size = rows.length - this.end; i < size; i++) {   		        for (var k = this.start; k < size - 1 - i + this.start; k++) {   		            var row1=rows[k],row2=rows[k + 1];   		            var x=this.getValue(row1.cells[cIdx]),y=this.getValue(row2.cells[cIdx]);   		            if (this[funcName](x,y,cell.desc)>0){							  this.swapNode(row1,row2);								}		        }   		    }   		    cell.updateSymbol();   		    while(cks.length > 0)cks.shift().checked = cks.shift();   		},				//数字比较算法   		CMP_NUMBER : function(x,y,desc){   		    var r="/[^d|.|-]/g";   		    x=x.replace(r,"");   		    y=y.replace(r,"");   		    return this.compare(x*1,y*1,desc);   		},				//时间比较算法   		CMP_DATE : function(x,y,desc){   		    var d='1900-01-01';   		    var x=this.strToDate(x==''?d:x);   		    var y=this.strToDate(y==''?d:y);   		    var z=x-y;   		    return desc?z*(-1):z;   		},		   		//英文字符串算法   		CMP_STRING_EN : function(x,y,desc){   		    x=this.getFirstChar(x);   		    y=this.getFirstChar(y);   		    return this.compare(x,y,desc);   		},				//中文字符串算法   		CMP_STRING_CH : function(x,y,desc){   		    x=x==""?"":SunRiseGB2Spell.getGB2312Spell(this.getFirstChar(x));   		    y=y==""?"":SunRiseGB2Spell.getGB2312Spell(this.getFirstChar(y));   		    return this.compare(x,y,desc);   		},				//简单值比较算法   		compare : function(x,y,desc){   		    if(x>y) return desc?-1:1;   		    else if(x<y) return desc?1:-1;   		    else return 0;   		},		   		//取字符串的第一个字符   		getFirstChar : function(s){   		    if(s=="")return "";   		    return (s+"").substr(0,1);   		},		   		//字符串转成日期类型 格式 MM/dd/YYYY MM-dd-YYYY YYYY/MM/dd YYYY-MM-dd      		strToDate : function(ds){       		    var d = new Date(Date.parse(ds));      		    if (isNaN(d)){       		        var arys= ds.split('-');      		        d = new Date(arys[0],arys[1]-1,arys[2]);      		    }   		    return d;      		},		  		//取TD中的值   		getValue : function(cell){   		    var v;   		    if(cell.sortObject!=null) v= cell.sortObject.value!=null?cell.sortObject.value:cell.sortObject.innerHTML;   		    else v= cell.innerHTML;   		    return v.replace(/(^s*)|(s*$)/g,"");   		},				swapNode : function(node1,node2){			var parent = node1.parentNode;//父节点			var t1 = node1.nextSibling;//两节点的相对位置			var t2 = node2.nextSibling;			if (t1) {				parent.insertBefore(node2, t1);			}			else {				parent.appendChild(node2);			}			if (t2) {				parent.insertBefore(node1, t2);			}			else {				parent.appendChild(node1);			}		}	}		})();

⌨️ 快捷键说明

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