发布一个js表格控件

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

 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值