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;
}
* 可变列宽的表格 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
}
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>
< 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