無限層樹狀,無數的版本,我也蹭蹭熱鬧,裡面的圖片自己搞定(18X18的gif,合攏.BigHe.gif,打開.BigKai.gif,明細(沒子目錄)details.gif)<Script Language="JavaScript">
//Name﹕無限層樹狀
//Design:LiuZXIT
//OverTime:2003/3/19
//Note:在IE5.i上測試通過var strStyle='<style type="text/css">'
strStyle+='span.SelectIng{color:#ff00ff;border:solid 1pt #666666;padding:0.5pt;height:4px;background-color:#cccccc;}'
strStyle+='span.NoSelect{color:#000084;border:solid 1pt #ffffff;padding:0.5pt;height:4px;background-color:#ffffff;}'
strStyle+='span.SelectEd{color:#D02090;border:solid 1pt #888888;padding:0.5pt;height:4px;background-color:#f3f3f3;}'
strStyle+='</style>'
document.write(strStyle)var imgOpen='bigkai.gif',imgClose='bighe.gif',imgDetail='details.gif';
var myRs=new Array(), selectItem;
function compare(a,b) {return parseInt(a[1]) - parseInt(b[1])}
function InsertItem(s){myRs[myRs.length++] = s.split(/,/);}function iniImages(asImgOpen,asImgClose,asImgDetail){ //初始化圖片文件名
if(asImgOpen != null)imgOpen=asImgOpen;
if(asImgClose != null)imgClose=asImgClose;
if(asImgDetail != null)imgDetail=asImgDetail;
}function ExCloAll(n){
var d=document.all('0'), e=d.all.tags('div')
for (i=0;i<e.length;i++)e[i].style.display=(n==1?'block':'none')
e=d.all.tags('p')
for (i=0;i<e.length;i++){if(ChkExist(e[i].children[1].value))e[i].children[0].src=(n==1?imgOpen:imgClose)}
}function ExCloItem(){ //點擊文字時觸發
var c,e=event.srcElement, p=e.parentElement.children
if(e.myHref!=null){
alert((e.myTarget!=null?e.myTarget:'window')+'.location='+e.myHref) //要改成連接到某頁只需把alert改成eval即可
}
else{window.status='no href'};
if(selectItem!=null)selectItem.className='NoSelect';
e.className='SelectEd'
selectItem=event.srcElement;
c=document.all(e.value)
if(c.tagName=='P')return
p[0].src=(p[0].src.indexOf(imgClose)==-1?imgClose:imgOpen)
c.style.display=(c.style.display=='none'?'block':'none')
}function ExCloItem2(){ //點擊圖片時觸發
var c,e=event.srcElement, p=e.parentElement.children
if(c=document.all(p[1].value)){
if(e.src.indexOf(imgDetail)==-1)e.src=(e.src.indexOf(imgClose)==-1?imgClose:imgOpen)
if(e.parentElement.id==null || e.parentElement.id=="")c.style.display=(c.style.display=='block'?'none':'block')
}else{if(e.src.indexOf(imgDetail)==-1)e.src=imgClose;}
}function OutItem(){
var e=event.srcElement
if(selectItem != '')e.className=(selectItem==e?'SelectEd':'NoSelect')
else e.className='NoSelect'
}function ChkExist(n){
n=parseInt(n)
if((n<myRs[0][1])||(n>myRs[myRs.length-1][1]))return false
var a,b,c,x=0, y=parseInt(myRs.length/2), z=myRs.length-1
while((x!=y)&&(y!=z)){
a=myRs[x][1], b=myRs[y][1], c=myRs[z][1]
if(n==a||n==b||n==c)return true
if(n>b)x=y;
else z=y;y=parseInt(x+z);
y=parseInt((x+z)/2);
}
return false
}function getParent(n){
var strRs= "",k=0;
for (var i=0; i < myRs.length; i++) strRs += ";"+myRs[i].join(",");
k=strRs.indexOf(n);
if(k==-1)return -1
strRs=strRs.substring(k + n.length + 1);
strRs=strRs.substring(0,strRs.indexOf(','));
return strRs
}function addItem(s){
if(s==null)return;
var arrItem = s.split(/,/),objParent,strHtml="",strP,arrRs=new Array();
if(document.all(arrItem[0])!=null){
alert('相同ID節點已存在,無法加入')
return false
}
if(document.all(arrItem[1])==null){
alert('指定ID節點不存在,無法加入')
return false
}
objParent=document.all(arrItem[1]);
if(!ChkExist(arrItem[1])){ //如果指向的是一個detail
for (var i=0; i < myRs.length; i++){
if(eval('/^'+arrItem[0]+',/').test(myRs[i].join(","))){
arrRs=myRs[i];
break;
}
}
strHtml+='<div id="'+arrItem[1]+'" style="font:10pt;cursor:hand;position:relative;left:20;display:block;">';
strHtml+='<p id="'+arrItem[0]+'" style="margin:0pt;"><img style="vertical-align:top;" onclick="ExCloItem2()" src="'+imgDetail+'"><span onclick="ExCloItem()"'+(arrItem.length>3?' myHref="'+arrItem[3]+'"':'')+(arrItem.length>4?' myTarget="' + arrItem[4]+'"':'') +' value="'+arrItem[0]+'" class="NoSelect" onmouseout="OutItem()" onmouseover="this.className=\'SelectIng\'">'+arrItem[2]+'</span></p></div>'
objParent.children[0].src=imgOpen;
objParent.id=null;
objParent.outerHTML+=strHtml;
}else{ //指向的是一個文件夾
strHtml+='<p id="'+arrItem[0]+'" style="margin:0pt;"><img style="vertical-align:top;" onclick="ExCloItem2()" src="'+imgDetail+'"><span onclick="ExCloItem()"'+(arrItem.length>3?' myHref="'+arrItem[3]+'"':'')+(arrItem.length>4?' myTarget="' + arrItem[4]+'"':'') +' value="'+arrItem[0]+'" class="NoSelect" onmouseout="OutItem()" onmouseover="this.className=\'SelectIng\'">'+arrItem[2]+'</span></p>'
objParent.innerHTML+=strHtml;
}
objParent=document.all(arrItem[1]);
myRs[myRs.length++] = arrItem;
myRs.sort(compare);
arrItem=null;
}function deleteItem(){
if(selectItem==null)return false;
n=parseInt(selectItem.value)
var a,b,c,x=0, y=parseInt(myRs.length/2), z=myRs.length-1
while((x!=y)&&(y!=z)){
a=myRs[x][1], b=myRs[y][1], c=myRs[z][1]
if(n==a){myRs=myRs.slice(0,x).concat(myRs.slice(x+1));break;}
if(n==b){myRs=myRs.slice(0,y).concat(myRs.slice(y+1));break;}
if(n==c){myRs=myRs.slice(0,z).concat(myRs.slice(z+1));break;}
if(n>b)x=y;
else z=y;y=parseInt(x+z);
y=parseInt((x+z)/2);
} var objSon=document.all(selectItem.value);
var objP=selectItem.parentElement;
var objDiv=objP.parentElement;
if(objSon.tagName=="DIV")objSon.outerHTML='';
objP.outerHTML='';
if(objDiv.innerHTML==''){
var arrChild=objDiv.parentElement.children;
for(var i=0;i<arrChild.length;i++){
if(arrChild[i]==objDiv){
var strId=objDiv.id;
objDiv.id='';
arrChild[i-1].id=strId;
arrChild[i-1].children[0].src=imgDetail; //如果不想改變文件夾的圖標可注解掉即可
break;
}
}
objDiv.outerHTML='';
}
selectItem=null;
}function drawTree(n){
if(n==0){
myRs.sort(compare)
document.write('<p style="font:10pt;cursor:hand;"><span onclick="ExCloAll(1)">全部展開</span>&nbsp;&nbsp;<span onclick="ExCloAll(0)">全部合攏</span></p>')
}
if (ChkExist(n)!=true)return
document.write('<div id="'+n+'" style="font:10pt;cursor:hand;'+(n!=0?'position:relative;left:20;display:none;':'')+'">')
for(var i=0;i<myRs.length;i++){
if (parseInt(myRs[i][1])>n)break;
if (myRs[i][1]==n){
document.write('<p style="margin:0pt;"'+(ChkExist(myRs[i][0])?'':' id="'+myRs[i][0]+'"')+'><img style="vertical-align:top;" onclick="ExCloItem2()" src="'+(ChkExist(myRs[i][0])?imgClose:imgDetail)+'">')
document.write('<span onclick="ExCloItem()"'+(myRs[i].length>3?' myHref="'+myRs[i][3]+'"':'')+(myRs[i].length>4?' myTarget="' + myRs[i][4]+'"':'') +'" value="'+myRs[i][0]+'" class="NoSelect" onmouseout="OutItem()" onmouseover="this.className=\'SelectIng\'">'+myRs[i][2]+'</span></p>')
drawTree(myRs[i][0])
}
}
document.write('</div>')
}iniImages('bigkai.gif','bighe.gif');
InsertItem('1,0,根目錄1')
InsertItem('11,1,子目錄1')
InsertItem('111,11,孫目錄1,b.htm,parent.frmMain')
InsertItem('1111,111,曾孫目錄,c.htm,top')
InsertItem('11111,1111,玄孫目錄,d.htm,window')
InsertItem('12,1,子目錄2')
InsertItem('2,0,根目錄2')
InsertItem('21,2,子目錄A,d.htm')
InsertItem('22,2,子目錄B')
InsertItem('3,0,根目錄3')
drawTree(0)
</Script>
<input type="button" value="addItem" onclick="addItem('121,12,孫目錄B')">
<input type="button" value="addItem" onclick="addItem('122,12,孫目錄C')">
<input type="button" value="addItem" onclick="addItem('1211,121,曾孫目錄1')">
<input type="button" value="deleteItem" onclick="deleteItem()">

解决方案 »

  1.   

    鎖定table指定表首尾和左邊列,不過有時定位上還是有點對不準=============lockTable.htm===========
    <html>
    <head>
    <META http-equiv=Content-Type content="text/html; charset=GBK">
    <script language="javascript" src="locktable.js"></script>
    </head>
    <div style="MARGIN: 2pt; OVERFLOW: scroll;width:160px;height:150px;">
    <table id="tbl" border=0 cellspacing="1" cellpadding="0" bgcolor=#660000>
    <tr><td nowrap bgcolor=#bbbbbb>標題一</td><td nowrap bgcolor=#bbbbbb>標題二</td><td nowrap bgcolor=#bbbbbb>標題三</td><td nowrap bgcolor=#bbbbbb>標題四</td></tr>
    <tr><td bgcolor=#bbbbbb>內容A</td><td bgcolor=#ffffff>內容B</td><td bgcolor=#ffffff>內容C</td><td bgcolor=#ffffff>內容D</td></tr>
    <tr><td bgcolor=#bbbbbb>內容A</td><td bgcolor=#ffffff>內容B</td><td bgcolor=#ffffff>內容C</td><td bgcolor=#ffffff>內容D</td></tr>
    <tr><td bgcolor=#bbbbbb>內容A</td><td bgcolor=#ffffff>內容B</td><td bgcolor=#ffffff>內容C</td><td bgcolor=#ffffff>內容D</td></tr>
    <tr><td bgcolor=#bbbbbb>內容A</td><td bgcolor=#ffffff>內容B</td><td bgcolor=#ffffff>內容C</td><td bgcolor=#ffffff>內容D</td></tr>
    <tr><td bgcolor=#bbbbbb>內容A</td><td bgcolor=#ffffff>內容B</td><td bgcolor=#ffffff>內容C</td><td bgcolor=#ffffff>內容D</td></tr>
    <tr><td bgcolor=#bbbbbb>內容A</td><td bgcolor=#ffffff>內容B</td><td bgcolor=#ffffff>內容C</td><td bgcolor=#ffffff>內容D</td></tr>
    <tr><td bgcolor=#bbbbbb>內容A</td><td bgcolor=#ffffff>內容B</td><td bgcolor=#ffffff>內容C</td><td bgcolor=#ffffff>內容D</td></tr>
    <tr><td nowrap bgcolor=#bbbbbb>標題一</td><td nowrap bgcolor=#bbbbbb>標題二</td><td nowrap bgcolor=#bbbbbb>標題三</td><td nowrap bgcolor=#bbbbbb>標題四</td></tr>
    </table>
    </div>
    <script language="javascript">
    LockTable(tbl,1,1,1);
    </script>
    ===========lockTable.js=================
    function DrawTable(scrTable,newTable,iStart,iEnd,jEnd){
    var i,j,k=0,newTR,newTD,intWidth=0,intHeight=0;
    newTable.mergeAttributes(scrTable);
    for (i=iStart;i<iEnd;i++){
    newTR=newTable.insertRow(k)
    newTR.mergeAttributes(scrTable.rows[i]);
    intHeight += scrTable.rows[i].offsetHeight;
    intWidth=0;
    for(j=0;j<(jEnd==-1?scrTable.rows[i].cells.length:jEnd);j++){
    newTD=scrTable.rows[i].cells[j].cloneNode(true);
    intWidth+= scrTable.rows[i].cells[j].offsetWidth;
    newTR.insertBefore(newTD);
    newTD.style.pixelWidth=scrTable.rows[i].cells[j].offsetWidth;
    }
    k++
    }
    newTable.style.pixelWidth=intWidth;
    newTable.style.pixelHeight=intHeight;
    }function LockTable(arTable,ColNum,RowHead,RowFoot){
    arTable.HeadRow=RowHead;
    var objDivMaster=arTable.parentElement;
    if(objDivMaster.tagName!='DIV')return;
    if((arTable.offsetHeight > objDivMaster.offsetHeight)&&(arTable.offsetWidth > objDivMaster.offsetWidth)){
    if((ColNum > 0) && (RowHead > 0)){
    var objTableLH=document.createElement("TABLE");
    var newTBody=document.createElement("TBODY");
    objTableLH.insertBefore(newTBody);
    objTableLH.id="objTableLH";
    objDivMaster.parentElement.insertBefore(objTableLH);
    DrawTable(arTable,objTableLH,0,RowHead,ColNum)
    objTableLH.srcTable=arTable;
    with(objTableLH.style){
    zIndex=804;
    position='absolute'
    pixelLeft=objDivMaster.offsetLeft;
    pixelTop=objDivMaster.offsetTop;
    }
    }

    if((ColNum > 0) && (RowFoot > 0)){
    var objTableLF=document.createElement("TABLE");
    var newTBody=document.createElement("TBODY");
    objTableLF.insertBefore(newTBody);
    objTableLF.id="objTableLF";
    objDivMaster.parentElement.insertBefore(objTableLF);
    DrawTable(arTable,objTableLF,arTable.rows.length - RowFoot,arTable.rows.length,ColNum)
    objTableLF.srcTable=arTable;
    with(objTableLF.style){
    zIndex=803;
    position='absolute'
    pixelLeft=objDivMaster.offsetLeft;
    pixelTop=objDivMaster.offsetTop + objDivMaster.offsetHeight - objTableLF.offsetHeight - 16;
    }
    }
    } if((RowHead > 0) && (arTable.offsetHeight > objDivMaster.offsetHeight)){
    var DivHead=document.createElement("DIV");
    objDivMaster.parentElement.insertBefore(DivHead);
    var objTableHead=document.createElement("TABLE");
    var newTBody=document.createElement("TBODY");
    objTableHead.id="HeadTar";
    objTableHead.style.position="relative"
    objTableHead.insertBefore(newTBody);
    DivHead.insertBefore(objTableHead);
    DrawTable(arTable,objTableHead,0,RowHead,-1)
    HeadTar.srcTable=arTable;
    with(DivHead.style){
    overflow="hidden";
    zIndex=802;
    pixelWidth=objDivMaster.offsetWidth - 16
    position='absolute';
    pixelLeft=objDivMaster.offsetLeft;
    pixelTop=objDivMaster.offsetTop;
    }
    objDivMaster.attachEvent("onscroll",divScroll1);
    }

    if((RowFoot > 0) && (arTable.offsetHeight > objDivMaster.offsetHeight)){
    var DivFoot=document.createElement("DIV");
    objDivMaster.parentElement.insertBefore(DivFoot);
    var objTableFoot=document.createElement("TABLE");
    var newTBody=document.createElement("TBODY");
    objTableFoot.insertBefore(newTBody);
    objTableFoot.id="FootTar";
    objTableFoot.style.position="relative"
    DivFoot.insertBefore(objTableFoot);
    DrawTable(arTable,objTableFoot,arTable.rows.length - RowFoot,arTable.rows.length,-1)
    objTableFoot.srcTable=arTable;
    with(DivFoot.style){
    overflow="hidden";
    zIndex=801;
    pixelWidth=objDivMaster.offsetWidth - 16
    position='absolute'
    pixelLeft=objDivMaster.offsetLeft;
    pixelTop=objDivMaster.offsetTop + objDivMaster.offsetHeight - DivFoot.offsetHeight - 16;
    }
    objDivMaster.attachEvent("onscroll",divScroll2);
    }

    if((ColNum > 0) && (arTable.offsetWidth > objDivMaster.offsetWidth)){
    var DivLeft=document.createElement("DIV");
    objDivMaster.parentElement.insertBefore(DivLeft);
    var objTableLeft=document.createElement("TABLE");
    var newTBody=document.createElement("TBODY");
    objTableLeft.insertBefore(newTBody);
    objTableLeft.id="LeftTar";
    objTableLeft.style.position="relative";
    DivLeft.insertBefore(objTableLeft);
    DrawTable(arTable,objTableLeft,0,arTable.rows.length,ColNum)
    LeftTar.srcTable=arTable;
    with(DivLeft.style){
    overflow="hidden";
    zIndex=800;
    pixelWidth=objDivMaster.offsetWidth - 16
    pixelHeight=objDivMaster.offsetHeight - 16
    position='absolute'
    pixelLeft=objDivMaster.offsetLeft;
    pixelTop=objDivMaster.offsetTop;
    }
    objDivMaster.attachEvent("onscroll",divScroll3);
    }
    }function divScroll1(){
    var tbl=document.all('HeadTar').srcTable,parDiv=tbl.parentElement;
    while(parDiv.tagName!='DIV')parDiv=parDiv.parentElement;
    document.all('HeadTar').style.pixelLeft= -parDiv.scrollLeft;
    }function divScroll2(){
    var tbl=document.all('FootTar').srcTable,parDiv=tbl.parentElement;
    while(parDiv.tagName!='DIV')parDiv=parDiv.parentElement;
    document.all('FootTar').style.pixelLeft= -parDiv.scrollLeft;
    }function divScroll3(){
    var tbl=document.all('LeftTar').srcTable,parDiv=tbl.parentElement;
    while(parDiv.tagName!='DIV')parDiv=parDiv.parentElement;
    document.all('LeftTar').style.pixelTop= -parDiv.scrollTop;
    }
      

  2.   

    自己常用到的幾個函數
    function String.prototype.Trim(){return  this.replace(/(^\s*)|(\s*$)/g, "");}
    function Number.prototype.RoundNum(n,y){
    var num=Math.round(this*Math.pow(10,n))/Math.pow(10,n)
    if ((n>0)&&(y=='n')){
    num+=''
    if((num.indexOf('.')==-1)&&(n>0))num+='.'
    for (i=0;i<n;i++)num+='0'
    return num.substring(0,num.indexOf('.')+n+1)
    }
    return num
    }function DateAdd(strInterval, NumDay, dtDate) {
    var dtTmp = new Date(dtDate);
    if (isNaN(dtTmp)) dtTmp = new Date();
    switch (strInterval) {
    case "s":return new Date(Date.parse(dtTmp) + (1000 * NumDay));
    case "n":return new Date(Date.parse(dtTmp) + (60000 * NumDay));
    case "h":return new Date(Date.parse(dtTmp) + (3600000 * NumDay));
    case "d":return new Date(Date.parse(dtTmp) + (86400000 * NumDay));
    case "w":return new Date(Date.parse(dtTmp) + ((86400000 * 7) * NumDay));
    case "m":return new Date(dtTmp.getFullYear(), (dtTmp.getMonth()) + NumDay, dtTmp.getDate());
    case "y":return new Date((dtTmp.getFullYear() + NumDay), dtTmp.getMonth(), dtTmp.getDate());
    }
    }function DateDiff(strInterval, dtStart, dtEnd) {
    var dtStart = new Date(dtStart);
    if (isNaN(dtStart)) dtStart = new Date();
    var dtEnd = new Date(dtEnd);
    if (isNaN(dtEnd)) dtEnd = new Date();
    switch (strInterval) {
    case "s":return parseInt((dtEnd - dtStart) / 1000);
    case "n":return parseInt((dtEnd - dtStart) / 60000);
    case "h":return parseInt((dtEnd - dtStart) / 3600000);
    case "d":return parseInt((dtEnd - dtStart) / 86400000);
    case "w":return parseInt((dtEnd - dtStart) / (86400000 * 7));
    case "m":return dtEnd.getMonth() - dtStart.getMonth();
    case "y":return dtEnd.getFullYear() - dtStart.getFullYear();
    }
    }function GetMonthDays(strArg){
    var dtArg=new Date(strArg);
    if (isNaN(dtArg)) dtArg=new Date();
    return (new Date(dtArg.getFullYear(),dtArg.getMonth()+1,dtArg.getDate()) - new Date(dtArg.getFullYear(),dtArg.getMonth(),dtArg.getDate()))/86400000
    }function a(s){return s.replace(/-(\d)(?=\D|$)/g,"-0$1");}function DtToStr(dtArg){
    dtArg=new Date(dtArg)
    if(isNaN(dtArg))return '參數不為標准日期'
    var strMon='0'+(dtArg.getMonth()+1)
    var strDay='0'+dtArg.getDate()
    return dtArg.getFullYear()+strMon.substring(strMon.length-2,strMon.length)+strDay.substring(strDay.length-2,strDay.length)
    }function StrToDt(strArg){
    if (strArg.length!=8)return '參數必須為8碼年月日'
    return strArg.substring(0,4)+'/'+(strArg.substring(4,6)*1)+'/'+(strArg.substring(6,8)*1)
    }function SumToBig(numArg){
    var arBig1='零,壹,貳,參,肆,伍,陸,柒,捌,玖'.split(',')
    var arBig2=',拾,佰,仟'.split(',')
    var strBig='',a,reg=/(0*$)/
    a=numArg.match(reg)
    for (i=a[1].length;i<numArg.length;i++){
    strBig=arBig1[numArg.substring(numArg.length-i-1,numArg.length-i)*1]+arBig2[(numArg.length-i)%4]+i+strBig
    }
    return strBig
    /* numArg+=''
    var i=numArg.length,strBig=arBig1[numArg.substring(i-1,i)],strBit=''
    i--
    while (i>=0){
    strBit=
    for (j=0;j<4;j++){
    if (numArg.substring(i,i+1)=='0'){
    if (numArg.substring(i,i+1)!='0')strBig=arBig1[numArg.substring(i-1,i)*1]
    }
    else{
    strBig=arBig1[numArg.substring(i-1,i)*1]+arBig2[j]+strBig
    }
    i--
    if(i<0)break;
    }
    }*/
    return strBig
    }function AddComma(numArg) {
    var reg = /(-?\d+)(\d{3})/
    numArg+=''
    while (reg.test(numArg)) {
    numArg=numArg.replace(reg, "$1,$2")
    }
    return numArg
    }
      

  3.   

    順便把自己的萬年歷和年月歷也貼上吧,可以跨frame(梅老大不在吧,獻醜了)========data.htm========
    <script language="javascript" src="getYM.js"></script>
    <script language="javascript" src="getCale.js"></script>
    <input type="text" id="date">
    <input type="button" value="click here" onclick="getYM(document.all('date'))">
    <input type="text" id="date1">
    <input type="button" value="click here" onclick="getDATE(document.all('date1'))">
    <br>adgagagafhafhafdgadfgafg<select><option>asdag</option></select>===========getYM.js==========
    /*name:獲取年月控件
    author:liuzxit
    design-date:2002/12/19
    note:在IE5.5下測試通過
    */var tarObject
    var d=new Date()
    sYear=d.getFullYear()
    sMonth=d.getMonth() + 1popup = window.createPopup()
    popBody = popup.document.body
    popBody.style.border="outset 1pt #cccccc"
    popBody.style.fontSize = "9pt"
    popBody.style.backgroundColor= "#c6c6c6"
    popBody.style.cursor="hand"var strPop='<table id="yMonth" author="liuzxit" border="1" bordercolorlight="#0053a6" bordercolordark="#ffffff" cellpadding="1" cellspacing="0" style="font-size:9pt;">'
    strPop+='<th width="28" bgcolor="#ff0000" onclick="parent.yearRoll(-4)" style="color:#00ffff;"><<'
    strPop+='<th width="28" bgcolor="#000000" style="color:#ffffff" onclick="parent.selectClicked(this)">'+(sYear - 2)
    strPop+='<th width="28" bgcolor="#000000" style="color:#ffffff" onclick="parent.selectClicked(this)">'+(sYear - 1)
    strPop+='<th width="28" bgcolor="#ffffff" style="color:#ff0000" onclick="parent.selectClicked(this)">'+sYear
    strPop+='<th width="28" bgcolor="#000000" style="color:#ffffff" onclick="parent.selectClicked(this)">'+(sYear + 1)
    strPop+='<th width="28" bgcolor="#ff0000" onclick="parent.yearRoll(4)" style="color:#00ffff;">>></th>'
    strPop+='<tr align="center"><td style="border:solid 1pt #c6c6c6;" onmouseover="parent.tdMove(this)" onmouseout="parent.tdOut(this)" onclick="parent.selectClicked(this)">1'
    strPop+='<td style="border:solid 2pt #c6c6c6;" onmouseover="parent.tdMove(this)" onmouseout="parent.tdOut(this)" onclick="parent.selectClicked(this)">2'
    strPop+='<td style="border:solid 2pt #c6c6c6;" onmouseover="parent.tdMove(this)" onmouseout="parent.tdOut(this)" onclick="parent.selectClicked(this)">3'
    strPop+='<td style="border:solid 2pt #c6c6c6;" onmouseover="parent.tdMove(this)" onmouseout="parent.tdOut(this)" onclick="parent.selectClicked(this)">4'
    strPop+='<td style="border:solid 2pt #c6c6c6;" onmouseover="parent.tdMove(this)" onmouseout="parent.tdOut(this)" onclick="parent.selectClicked(this)">5'
    strPop+='<td style="border:solid 2pt #c6c6c6;" onmouseover="parent.tdMove(this)" onmouseout="parent.tdOut(this)" onclick="parent.selectClicked(this)">6</td></tr>'
    strPop+='<tr align="center"><td style="border:solid 1pt #c6c6c6;" onmouseover="parent.tdMove(this)" onmouseout="parent.tdOut(this)" onclick="parent.selectClicked(this)">7'
    strPop+='<td style="border:solid 2pt #c6c6c6;" onmouseover="parent.tdMove(this)" onmouseout="parent.tdOut(this)" onclick="parent.selectClicked(this)">8'
    strPop+='<td style="border:solid 2pt #c6c6c6;" onmouseover="parent.tdMove(this)" onmouseout="parent.tdOut(this)" onclick="parent.selectClicked(this)">9'
    strPop+='<td style="border:solid 2pt #c6c6c6;" onmouseover="parent.tdMove(this)" onmouseout="parent.tdOut(this)" onclick="parent.selectClicked(this)">10'
    strPop+='<td style="border:solid 2pt #c6c6c6;" onmouseover="parent.tdMove(this)" onmouseout="parent.tdOut(this)" onclick="parent.selectClicked(this)">11'
    strPop+='<td style="border:solid 2pt #c6c6c6;" onmouseover="parent.tdMove(this)" onmouseout="parent.tdOut(this)" onclick="parent.selectClicked(this)">12</td></tr>'
    strPop+='<tr align="center" bgcolor="#848484" style="color:#ffffff"><td colspan=3 onclick="parent.selectClicked(this)">本年月'
    strPop+='<td colspan=3 onclick="parent.hidePop();">關閉</td></tr>'
    strPop+='</table>'
    popBody.innerHTML=strPopfunction tdMove(e){e.style.border="outset 2pt #ffffff"}
    function tdOut(e){e.style.border="solid 2pt #c6c6c6"}
    function yearRoll(n){
    var e=popup.document.all('yMonth')
    e.cells[1].innerText = parseInt(e.cells[1].innerText) + parseInt(n)
    e.cells[2].innerText = parseInt(e.cells[2].innerText) + parseInt(n)
    e.cells[3].innerText = parseInt(e.cells[3].innerText) + parseInt(n)
    e.cells[4].innerText = parseInt(e.cells[4].innerText) + parseInt(n)
    var reg=/(\d{4})(\/)(\d{1,2})/
    var r=reg.exec(tarObject.value)
    tarObject.value=(parseInt(r[1])+n)+'/'+r[3]
    }function selectClicked(e){
    var p=e.parentElement
    switch(p.rowIndex){
    case 0:for(var i=1;i<5;i++){
    p.cells[i].style.backgroundColor='#000000';
    p.cells[i].style.color='#ffffff';
    }
    e.style.backgroundColor='#ffffff';
    e.style.color='#ff0000';
    tarObject.value=tarObject.value.replace(/(\d{4})(\/)(\d{1,2})/,e.innerText+'/$3');
    break;
    case 3:tarObject.value=sYear+'/'+sMonth;
    popup.hide();
    break;
    default:
    tarObject.value=tarObject.value.replace(/(\d{4})(\/)(\d{1,2})/,'$1/'+e.innerText);
    e.style.border="solid 1pt #c6c6c6"
    popup.hide();
    break;
    }
    }function hidePop(){popup.hide()}
    function getYM(s){
    tarObject=s
    if (s.value=='')s.value=sYear+'/'+sMonth

    var reg=/(\d{4})(\/)(\d{1,2})/
    var r=reg.exec(s.value)
    if (r==null){s.value=sYear+'/'+sMonth;
    r=reg.exec(s.value)}
    var e=popup.document.all('yMonth').rows[0]
    for (var i=1;i<5;i++){
    if (e.cells[i].style.color=='#ff0000'){
    s.value=e.cells[i].innerText+'/'+r[3]
    yearRoll(r[1] - e.cells[i].innerText);
    break;
    }
    }
    var e=event.srcElement
    popup.show(-70,e.clientHeight+5,196,84,e)
    }
      

  4.   

    =========getCale.js=========
    /*name:萬年歷控件
    author:liuzxit
    design-date:2002/12/19
    note:在IE5.5下測試通過
    */function caleTDMove(e){e.style.borderColor="#ffffff #333333 #333333 #ffffff"}
    function caleTDOut(e){e.style.border="solid 1pt #c6c6c6"}
    function hideCale(){popCale.hide()}function yearChange(){  //重寫年份的<SELECT>
    var e=popCale.document.all('yearSel')
    e.options.length=0
    for (i=nYear-4;i<parseInt(nYear)+5;i++){
    e.options.length++
    e.options[e.options.length - 1].value=i
    e.options[e.options.length - 1].text=i
    }
    e.selectedIndex=4
    }function CaleClick(e){  //選定某一天時
    if(isNaN(parseInt(e.innerText))){ //如果是點擊"今天"而觸發
    var d=new Date()
    tarObject.value=d.getFullYear()+'/'+(d.getMonth()+1)+'/'+d.getDate()
    e.style.borderColor="#848484"
    }
    else{tarObject.value=nYear+'/'+(parseInt(nMonth)+1)+'/'+e.innerText
    e.style.borderColor="#c6c6c6"
    }
    popCale.hide()
    }function changeYM(e,n){ //改變年份或月份﹐或點>>和<<時觸發
    if (e.tagName=='SELECT'){
    if(e.value.length==4){nYear=e.value;yearChange()}
    else{nMonth=e.value}
    }
    else{nMonth=parseInt(nMonth)+n
    switch(nMonth){
    case 12:nYear++;nMonth=0;
    yearChange()
    popCale.document.all('monthSel').selectedIndex=0;break;
    case -1:nYear--;nMonth=11;
    yearChange()
    popCale.document.all('monthSel').selectedIndex=11;break;
    default:popCale.document.all('monthSel').selectedIndex=nMonth;break;
    }
    }
    rewriteCale()
    }function rewriteCale(){ //重寫日歷
    var newTb,newTR,newTD
    newTb=popCale.document.all('LiuzxCale').tBodies[0]
    for (i=0;i<=newTb.rows.length;i++)newTb.deleteRow(2)
    qtyDay=(new Date(nYear,parseInt(nMonth)+1,1) - new Date(nYear,nMonth,1))/24/3600/1000
    fDay=1-(new Date(nYear,nMonth,1).getDay())
    for (i=0;i<42;i++){
    if (i % 7==0)newTR=newTb.insertRow(newTb.rows.length - 2)
    newTD=newTR.insertCell()
    if (fDay>0 && fDay<=qtyDay)newTD.innerText=fDay
    newTD.style.border="solid 1pt #c6c6c6"
    newTD.align='center'
    newTD.onmouseover=Function("parent.caleTDMove(this)")
    newTD.onmouseout=Function("parent.caleTDOut(this)")
    newTD.onclick=Function("parent.CaleClick(this)")
    fDay++
    }
    }function isDate(str){ //判斷日期是否是合法的
    var reg = /^(\d{4})(-|\/)(0?[1-9]|1[0-2])(-|\/)(0?[1-9]|[12][0-9]|3[01])$/g; 
    var r = reg.exec(str); 
    if(r==null)return false;
    var d = new Date(r[1], r[3]-1,r[5]); 
    var newStr=d.getFullYear()+r[2]+(d.getMonth()+1)+r[2]+d.getDate()
    var reg=/(\/|-)(0*)( *)([1-9])/g
    var t=str.replace(reg,'$1$4')
    if (newStr==t)return true;
    return false;
    }function getDATE(s){ //設定那個控件加入萬年歷
    tarObject=s
    if ((s.value!='')&&(isDate(s.value))){ //如果控件原來有日期并且是合法的
    var reg=/(\d{4})(\/)(\d{1,2})(\/)(\d{1,2})/
    var r=reg.exec(s.value);
    nYear=r[1];nMonth=r[3] - 1;
    }
    else{
    var d=new Date()
    nYear=d.getFullYear();nMonth=d.getMonth();
    }
    var e=event.srcElement
    popCale.show(-70,e.clientHeight+5,185,172,e)
    popCale.document.all('monthSel').selectedIndex=nMonth
    yearChange()
    rewriteCale()
    }//創建萬年歷
    popCale = window.createPopup()
    CaleBody = popCale.document.body
    CaleBody.style.border="outset 1pt #cccccc"
    CaleBody.style.fontSize = "9pt"
    CaleBody.style.backgroundColor= "#c6c6c6"
    CaleBody.style.cursor="hand"var d=new Date()
    var nYear=d.getFullYear()
    var nMonth=d.getMonth()
    var arMonth=new Array('一月','二月','三月','四月','五月','六月','七月','八月','九月','十月','十一月','十二月')
    var qtyDay=(new Date(nYear,parseInt(nMonth)+1,1) - new Date(nYear,nMonth,1))/24/3600/1000
    var strCale='<table bgcolor="#c6c6c6" id="LiuzxCale" author="liuzxit" border="1"'
    strCale+=' bordercolorlight="#0053a6" bordercolordark="#ffffff" cellpadding="1"'
    strCale+=' cellspacing="0" style="font-size:9pt;height:170;cursor:hand;">'
    strCale+='<th bgcolor="#848484" style="color:#00ffff;border:solid 1pt #848484"'
    strCale+=' onclick="parent.changeYM(this,-1)"><<'
    strCale+='<th colspan=2 style="border:solid 1pt #c6c6c6">'
    strCale+='<select id="yearSel" onchange="parent.changeYM(this)" style="font:9pt;"></select>'
    strCale+='<th colspan=3 style="border:solid 1pt #c6c6c6">'
    strCale+='<select id="monthSel" onchange="parent.changeYM(this)" style="font:9pt;">'
    for (i=0;i<12;i++){
    strCale+='<option value='+i+(i==nMonth+1?' selected':'')+'>'+arMonth[i]+'</option>'
    }
    strCale+='</select><th bgcolor="#848484" style="color:#00ffff;border:solid 1pt #848484"'
    strCale+=' onclick="parent.changeYM(this,1)">>></th>'
    strCale+='<tr align=center style="color:#ffffff" bgcolor="#000000">'
    strCale+='<td width=22 bgcolor="#ff0000">日'
    strCale+='<td width=22>一<td width=22>二<td width=22>三<td width=22>四<td width=22>五'
    strCale+='<td width=22 bgcolor="#ff0000">六</td></tr>'
    var fDay=1-(new Date(nYear,nMonth,1).getDay())
    for (i=0;i<42;i++){
    if (i % 7==0)strCale+='<tr align=center>'
    strCale+='<td style="border:solid 1pt #c6c6c6" onmouseover="parent.caleTDMove(this)"'
    strCale+=' onmouseout="parent.caleTDOut(this)" onclick="parent.CaleClick(this)">'
    strCale+=(fDay>0&&fDay<=qtyDay?fDay:'')+'</td>'
    fDay++
    }
    strCale+='</tr>'
    strCale+='<tr align=center bgcolor="#848484">'
    strCale+='<td style="border:1pt solid #848484">&nbsp;'
    strCale+='<td colspan=2 style="border:1pt solid #848484" onmouseover="parent.caleTDMove(this)"'
    strCale+=' onmouseout="this.style.borderColor=\'#848484\'"'
    strCale+=' onclick="parent.CaleClick(this)">今天'
    strCale+='<td style="border:1pt solid #848484">&nbsp;'
    strCale+='<td colspan=2 style="border:1pt solid #848484"'
    strCale+=' onclick="this.style.borderColor=\'#848484\';parent.hideCale();"'
    strCale+=' onmouseover="parent.caleTDMove(this)"'
    strCale+=' onmouseout="this.style.borderColor=\'#848484\'">關閉'
    strCale+='<td style="border:1pt solid #848484">&nbsp;</td><tr>'
    strCale+='</table>'
    CaleBody.innerHTML=strCale
    yearChange()
      

  5.   

    偶正在学习中,正好要用到这里的几个模块               谢谢&恭喜....
      

  6.   

    up up up 我也晕,呵呵