//SelectedItem用于储存有焦点的列的指针 var SelectedItem="",StartRow,EndRow,len,SortIndex=null;
//初始化 function resetGrid()...{ var trs=element.rows; len=trs.length; //滤掉THEAD部分 //alert(len);31 for(StartRow=0;StartRow<len;StartRow++)...{ if(getParentByTag(trs[StartRow],"THEAD")==0) break; } //滤掉TFOOT部分 for(EndRow=len-1;EndRow>StartRow;EndRow--)...{ if(getParentByTag(trs[EndRow],"TFOOT")==0) break; } len-=StartRow+(len-1-EndRow); } //捕获↑和↓键,前者为纪录上移,后者为记录下移 function PasteRow()...{ var code=event.keyCode; if(code!=38&&code!=40) returntrue; var index; try...{ index=(code==38)?(element.SelectedItem.rowIndex-1):(element.SelectedItem.rowIndex+1); }catch(e)...{ index=1; } element.show(index); } //排序,曾经尝试用XSL排序,不成功,因为使用XML有版本的限制 function doSort(col)...{ //COL的字符串格式为:NUMBER+" "+"ASC/DESC",NUMBER指的是第几列,第一列的NUMBER为1,而不是0,例如:1 ASC var flag,T,TimeCost; //测试排序需要的时间 T=new Date().getTime(); col=col.split(""); //ASC为降序排列,DESC为逆序 if(col.length!=2)...{ flag=-1; }else...{ if(col[1].toUpperCase()=="ASC") ...{ flag=1; }else...{ flag=-1; } } col=parseInt(col[0]); if(isNaN(col)) ...{ //alert("无效的sort属性,正确格式为'[Number] [ASC/DESC]'!") return; } col-=1; if(!isNaN(parseInt(offset))) ...{ col+=parseInt(offset); } resetGrid(); //以下不需要加Alert,只作操作失效处理 //行数<1 if(len<1) return; //如果是非常规排序(比如某些CELL是跨列[COLSPAN>1]或者跨行[ROWSPAN>1],那么排序可能失效) try...{ var trs=element.rows; var ary=new Array(); for(var i=0;i<len;i++)...{ ary[i]=new Array(trs[i+StartRow],trs[i+StartRow].cells(col).innerText); } ary.sort(new Function("a","b","return do_compair(a[1],b[1],"+flag+")")); for(i=len-1;i>=0;i--)...{ var x=ary[i][0].rowIndex; element.moveRow(x,StartRow); } /**//* 排序完之后,触发show_sort_action函数。 flag:返回ASC或者DESC,表示是升序还是降序排列 SortIndex:原来排序的列的cellIndex col:新排序的列的cellIndex 其中,一个表的第一列的cellIndex值为0 */ if(!isNaN(parseInt(offset))) col-=offset; if(typeof(show_sort_action)=="function")...{ show_sort_action(SortIndex,col,(flag==1)?"ASC":"DESC"); } SortIndex=col; }catch(Exception)...{ } //测试完毕 TimeCost=new Date().getTime()-T; } //当点击一个行时,显示的信息 function show(obj)...{ //如果OBJ是null,那么判断event.srcElement是否属于该TABLE,如果不是,return if(obj==null)...{ var e=event.srcElement; var e1=e; if(event.button!=1||e==null) return; obj=getParentByTag(e); if(obj==0||obj.rowIndex>EndRow) return;
//如果第一列是序号列,不进行点击列名排序 var objcol; objcol=getParentByTag(e,"TH"); if (objcol.cellIndex==0)...{ if(objcol.innerText=="序号")...{ return; } } //如果点击的是THEAD部分,那么将进行排序 if(obj.rowIndex<StartRow)...{ e=getParentByTag(e1,"TD"); if(e==0) ...{ e=getParentByTag(e1,"TH"); if(e==0) ...{ return; } } var col=e.cellIndex+1; if(e.CellSort!="ASC")...{ e.setAttribute("CellSort","ASC"); }else...{ e.setAttribute("CellSort","DESC"); } doSort(""+col+""+e.CellSort); //如果第一列是序号列,重新编排序号 buildSequence(); } } } //如果有序号按序号重新排序,判断标志0行0列=="序号" function buildSequence()...{ var xh=1; //alert(element.rows[0].cells[0].innerText); if(element.rows[0].cells[0].innerText=="序号")...{ for(i=StartRow;i<=EndRow;i++)...{ element.rows[i].cells[0].innerText=xh++; } } } //获得产生事件并且tagName=tag的元素 function getParentByTag(x,tag)...{ if(tag==null)...{ tag="TR"; } if(x.tagName==tag)...{ return x; } var y=x.parentElement; if(y==null||!element.contains(y))...{ return0; } if(y.tagName!=tag)...{ return getParentByTag(y,tag); } return y; } //设置排序后的标志 function show_sort_action(oindex,index,flag)...{ var tag; if(oindex!=null)...{ var e1=element.rows[0].cells(oindex).all[0]; x=e1.innerText; x=x.replace("↓",""); x=x.replace("↑",""); e1.innerText=x; } if(flag=="ASC")...{ tag="↓"; }else...{ tag="↑"; } var e=element.rows[0].cells(index).all[0]; e.innerText+=tag; } </script>
<script language=vbscript> '//用文本方式比较两个字符串,如果用ANSI方式,那么汉字比较不出来,这虽然导致排序比较慢,但是有效 function do_compair(str1,str2,flag) do_compair=strcomp(str1,str2,1) if flag<> 1 then do_compair=-do_compair end function </script> </PUBLIC:COMPONENT>
function StorePage(){d=document;t=d.selection?(d.selection.type!=None?d.selection.createRange().text:):(d.getSelection?d.getSelection():);void(keyit=window.open(http://www.365key.com/storeit.