ResizedColTable.js
/**/ /*********************************** * 可变列宽的表格 V1.1 2007-01-01 * Author:lzb linzhuobin@gmail.com * 2006-11-18 发布 V1.0 * 2007-01-01 V1.1 增加了列宽保持功能 ***********************************/ function ResizedColTable(tb) ... { var DEFAULT_COL_WIDTH=52; var dragSpan=null, preWidth=0, preX=0, newWidth=0; //改变列宽 (响应 onmousedown) function doMouseDown()...{ var evt = arguments.length==0 ? event : arguments[0]; dragSpan = evt.srcElement?evt.srcElement:evt.target; preWidth = parseInt(dragSpan.firstChild.style.width); preX = evt.x?evt.x:evt.pageX; if(dragSpan.setCapture)...{ dragSpan.setCapture(); dragSpan.onmousemove = changeColWidth; dragSpan.onmouseup = changeColWidthStop; }else if(window.captureEvents)...{ window.captureEvents(Event.MOUSEMOVE|Event.MOUSEUP); document.onmousemove = changeColWidth; document.onmouseup = changeColWidthStop; } } //改变列宽 (响应 onmousemove) function changeColWidth()...{ var evt = arguments.length==0 ? event : arguments[0]; var newX = evt.x?evt.x:evt.pageX; newWidth = newX - preX + preWidth; if(newWidth<8) newWidth=8; } //改变列宽 (响应 onmouseup) function changeColWidthStop()...{ if(dragSpan.releaseCapture)...{ dragSpan.releaseCapture(); dragSpan.onmousemove = null; dragSpan.onmouseup = null; }else if(window.captureEvents)...{ window.captureEvents(Event.MOUSEMOVE|Event.MOUSEUP); document.onmousemove = null; document.onmouseup = null; } dragSpan.firstChild.style.width = newWidth; var i=dragSpan.parentNode.cellIndex; for(var j=1;j<tb.rows.length;j++)...{ tb.rows[j].cells[i].firstChild.style.width=newWidth; } saveWidth(); } //鼠标所在行高亮显示 function doMouseOver()...{ this.className="dataRowSelected"; } //鼠标移出行 function doMouseOut()...{ this.className="dataRow"+(this.rowIndex%2); } //url+table.id 保证Cookie的唯一,以区别不同页面的同名控件 function getCookieName()...{ var i=-1; var url=window.location+""; i=url.lastIndexOf("?"); if(i>0)url=url.substr(0,i); i=url.indexOf("///"); if(i>0)url=url.substr(i+3,url.length-i-3); i=url.indexOf("//"); if(i>0)url=url.substr(i+2,url.length-i-2); i=url.indexOf("/"); if(i>0)url=url.substr(i,url.length-i); return url+"$"+tb.id; } //保存列宽到Cookie function saveWidth()...{ var aWidth=new Array(); var ths = tb.rows[0].cells; for(var i=0;i<ths.length;i++)...{ var sp=ths[i].firstChild; aWidth.push(sp.firstChild.style.width); } var date = new Date(); date.setDate(date.getDate()+7); //date.setSeconds(date.getSeconds()+7); CookieHelper.setCookie(getCookieName(),aWidth,date); } //从Cookie初始化列宽 function initWidth()...{ var sWidth = CookieHelper.getValue(getCookieName()); if(!sWidth)return; var aWidth=sWidth.split(","); var ths = tb.rows[0].cells; if(aWidth.length!=ths.length)return; for(var i=0;i<ths.length;i++)...{ var sp=ths[i].firstChild; sp.firstChild.style.width=aWidth[i]; } } //初始化 new function()...{ initWidth(); var ths = tb.rows[0].cells; for(var i=0;i<ths.length;i++)...{ var sp=ths[i].firstChild; if(sp.firstChild.style.width=="")sp.firstChild.style.width=DEFAULT_COL_WIDTH; if(sp.fixed!="true") sp.onmousedown=doMouseDown; else sp.style.cursor="default"; for(var j=1;j<tb.rows.length;j++)...{ var tr=tb.rows[j]; if(i==0)...{ tr.className="dataRow"+(j%2); tr.onmouseover=doMouseOver; tr.onmouseout=doMouseOut; } tr.cells[i].firstChild.style.width=sp.firstChild.style.width; } } saveWidth(); } } // cookie操作 function CookieHelper() ... {} ; // 保存cookie CookieHelper.setCookie = function (name,value,expires,path,domain) ... { if(!name || !value) return; var sCookie=name+"="+escape(value)+";"; if(expires)...{ try...{ sCookie+="expires="+expires.toGMTString()+";"; }catch(e)...{ } } if(path)...{ sCookie+="path="+path+";"; } if(domain)...{ sCookie+="domain="+domain+";"; } document.cookie=sCookie;} // 获取cookie值 CookieHelper.getValue = function (sName) ... { var value=null; var aCookie = document.cookie.split("; "); for (var i=0; i < aCookie.length; i++)...{ var aCrumb = aCookie[i].split("="); if (sName == aCrumb[0])...{ value=unescape(aCrumb[1]); break; } } return value;}style.css
.purpleTb {...} { BORDER-RIGHT: #666666 1px solid; BORDER-TOP: #b5caff 1px solid; BORDER-LEFT: #b5caff 1px solid; BORDER-BOTTOM: #666666 1px solid} .purpleTb {...} { FONT-SIZE: 12px} .purpleTb .fieldTr {...} { BACKGROUND-IMAGE: url(thbg.jpg); BACKGROUND-COLOR: #ece9d8} .purpleTb .fieldTd {...} { BORDER-RIGHT: #666666 1px solid; PADDING-RIGHT: 0px; BORDER-TOP: #fff 2px solid; PADDING-LEFT: 0px; FONT-WEIGHT: normal; PADDING-BOTTOM: 0px; BORDER-LEFT: #fff 1px solid; PADDING-TOP: 2px; BORDER-BOTTOM: #c0c0c0 1px solid; HEIGHT: 28px} .purpleTb .fieldTd .fieldNowrapDiv {...} { PADDING-RIGHT: 0px; PADDING-LEFT: 3px; PADDING-BOTTOM: 0px; OVERFLOW: hidden; CURSOR: default; PADDING-TOP: 3px; WHITE-SPACE: nowrap; TEXT-OVERFLOW: ellipsis} .purpleTb .fieldTd .dragDiv {...} { PADDING-RIGHT: 3px; DISPLAY: block; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; WIDTH: 100%; CURSOR: e-resize; PADDING-TOP: 0px} .purpleTb .dataRow0 {...} { BACKGROUND-COLOR: #fafafa} .purpleTb .dataRow1 {...} { BACKGROUND-COLOR: #fff} .purpleTb .dataRowSelected {...} { BACKGROUND-COLOR: #efefef} .purpleTb .dataTd {...} { BORDER-RIGHT: #b5caff 1px solid; PADDING-RIGHT: 3px; BORDER-TOP: #fff 1px solid; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; BORDER-LEFT: #fff 1px solid; PADDING-TOP: 0px; BORDER-BOTTOM: #b5caff 1px solid; HEIGHT: 22px} .purpleTb .dataTd .dataNowrapDiv {...} { PADDING-RIGHT: 0px; PADDING-LEFT: 3px; PADDING-BOTTOM: 0px; OVERFLOW: hidden; PADDING-TOP: 3px; WHITE-SPACE: nowrap; TEXT-OVERFLOW: ellipsis}
demo.htm
< HTML > < HEAD > < META http-equiv =Content-Type content ="text/html; charset=gb2312" > < LINK href ="style.css" type =text/css rel =stylesheet > < SCRIPT src ="ResizedColTable.js" ></ SCRIPT > < STYLE > ... BODY {...}{ MARGIN: 0px}</STYLE></HEAD><BODY><TABLE class=purpleTb id=table1 cellSpacing=0 cellPadding=0 border=0> <TBODY> <TR class=fieldTr> <TH class=fieldTd> <DIV class=dragDiv fixed="true"> <DIV class=fieldNowrapDiv onmousedown=event.cancelBubble=true; title="" style="WIDTH: 35px">序号</DIV></DIV></TH> <TH class=fieldTd> <DIV class=dragDiv fixed="false"> <DIV class=fieldNowrapDiv onmousedown=event.cancelBubble=true; title="" style="WIDTH: 130px">运行日程表达式</DIV></DIV></TH> <TH class=fieldTd> <DIV class=dragDiv fixed="false"> <DIV class=fieldNowrapDiv onmousedown=event.cancelBubble=true; title="" style="WIDTH: 180px">下次运行时间</DIV></DIV></TH> <TH class=fieldTd> <DIV class=dragDiv fixed="false"> <DIV class=fieldNowrapDiv onmousedown=event.cancelBubble=true; title="" style="WIDTH: 200px">程序标识</DIV></DIV></TH> <TH class=fieldTd> <DIV class=dragDiv fixed="false"> <DIV class=fieldNowrapDiv onmousedown=event.cancelBubble=true; title="" style="WIDTH: 150px">描述</DIV></DIV></TH> <TH class=fieldTd> <DIV class=dragDiv fixed="false"> <DIV class=fieldNowrapDiv onmousedown=event.cancelBubble=true; title="" style="WIDTH: 100px">操作</DIV></DIV></TH></TR> <TR> <TD class=dataTd> <DIV class=dataNowrapDiv title="" style="TEXT-ALIGN: center"><B>0</B></DIV></TD> <TD class=dataTd> <DIV class=dataNowrapDiv title="">0 46 21 8 1 ?</DIV></TD> <TD class=dataTd> <DIV class=dataNowrapDiv title="">2008年01月08日 21时46分00秒 </DIV></TD> <TD class=dataTd> <DIV class=dataNowrapDiv title="">jobDetail_test</DIV></TD> <TD class=dataTd> <DIV class=dataNowrapDiv title=测试>测试</DIV></TD> <TD class=dataTd> <DIV class=dataNowrapDiv title="" style="TEXT-ALIGN: center"><INPUT type=button value=修改日程></DIV></TD></TR> <TR> <TD class=dataTd> <DIV class=dataNowrapDiv title="" style="TEXT-ALIGN: center"><B>1</B></DIV></TD> <TD class=dataTd> <DIV class=dataNowrapDiv title="">40 42 17 16 1 ?</DIV></TD> <TD class=dataTd> <DIV class=dataNowrapDiv title="">2008年01月16日 17时42分40秒 </DIV></TD> <TD class=dataTd> <DIV class=dataNowrapDiv title="">jobDetail_importXlsData</DIV></TD> <TD class=dataTd> <DIV class=dataNowrapDiv title=导入excel数据>导入excel数据</DIV></TD> <TD class=dataTd> <DIV class=dataNowrapDiv title="" style="TEXT-ALIGN: center"><INPUT type=button value=修改日程></DIV></TD></TR></TBODY></TABLE><SCRIPT>...new ResizedColTable(document.getElementById('table1'));</SCRIPT></BODY></HTML>
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1494472