如题,点击哪个日期能获取到点击的日期!function DateLinkMapping(date, link) 
{
    this.Date = date;
    this.Link = link;
}
var Calendar = {
    settings:
            {
                firstDayOfWeek: 1,
                baseClass: "calendar",
                curDayClass: "curDay",
                prevMonthCellClass: "prevMonth",
                nextMonthCellClass: "nextMonth",
                curMonthNormalCellClass: "",
                prevNextMonthDaysVisible: true
            },
    containerId: "",
    weekDayNames: [],
    dateLinkMappings: [],
    Init: function(weekDayNames, dateLinkMappings, settings)
     {
        if (!weekDayNames || weekDayNames.length && weekDayNames.length != 7) 
        {
            this.weekDayNames[1] = "一";
            this.weekDayNames[2] = "二";
            this.weekDayNames[3] = "三";
            this.weekDayNames[4] = "四";
            this.weekDayNames[5] = "五";
            this.weekDayNames[6] = "六";
            this.weekDayNames[7] = "日";
        }
        else 
        {
            this.weekDayNames = weekDayNames;
        }
        if (dateLinkMappings) 
        {
            this.dateLinkMappings = dateLinkMappings;
        }
    },
    RenderCalendar: function(divId, month, year) 
    {
        this.containerId = divId;
        var ht = [];        ht.push("<table class='", this.settings.baseClass, "' cellspacing='0' cellpadding='0' border='0'>");
        ht.push(this._RenderTitle(month, year));
        ht.push(this._RenderBody(month, year));
        ht.push("</table>");        document.getElementById(divId).innerHTML = ht.join("");
        this._InitEvent(divId, month, year);
    },
    _RenderTitle: function(month, year) 
    {
        var ht = [];
        //日期
        ht.push("<tr>");
        ht.push("<th colspan='7' style='width:100%;'><div style='float:left;width:10%;text-align:center;' id='", this.containerId, "_prevMonth' title='上一月'><</div><div style='float:left;text-align:center;width:80%'>", year, "年", month, "月</div><div style='float:right;width:10%; text-align:center;' id='", this.containerId, "_nextMonth' title='下一月'>></div></th>");
        ht.push("</tr>");
        //星期
        ht.push("<tr>");
        for (var i = 0; i < 7; i++) 
        {
            var day = (i + this.settings.firstDayOfWeek) == 7 ? 7 : (i + this.settings.firstDayOfWeek) % 7;
            ht.push("<th>", this.weekDayNames[day], "</th>")
        }
        ht.push("</tr>");
        return ht.join("");
    },
    _RenderBody: function(month, year) 
    {
        var date = new Date(year, month - 1, 1);
        var day = date.getDay();
        var dayOfMonth = 1;
        var daysOfPrevMonth = (7 - this.settings.firstDayOfWeek + day) % 7;
        var totalDays = this._GetTotalDays(month, year);
        var totalDaysOfPrevMonth = this._GetToalDaysOfPrevMonth(month, year);
        var ht = [];
        var curDate;        for (var i = 0; ; i++) 
        {
            curDate = null;
            if (i % 7 == 0) 
            {//新起一行
                ht.push("<tr>");
            }
            ht.push("<td");
            if (i >= daysOfPrevMonth && dayOfMonth <= totalDays) 
            {//本月
                curDate = new Date(year, month - 1, dayOfMonth);
                if (Date.parse(new Date().toDateString()) - curDate == 0)
                {
                    ht.push(" class='", this.settings.curDayClass, "'");
                }
                else 
                {
                    ht.push(" class='", this.settings.curMonthNormalCellClass, "'");
                }
                dayOfMonth++;            }
            else if (i < daysOfPrevMonth) 
            {//上月
                if (this.settings.prevNextMonthDaysVisible)
                 {
                    var prevMonth = month;
                    var prevYear = year;
                    if (month == 1) 
                    {
                        prevMonth = 12;
                        prevYear = prevYear - 1;
                    }
                    else 
                    {
                        prevMonth = prevMonth - 1;
                    }
                    curDate = new Date(prevYear, prevMonth - 1, totalDaysOfPrevMonth - (daysOfPrevMonth - i - 1));                    ht.push(" class='", this.settings.prevMonthCellClass, "'");
                }
            }
            else 
            {//下月
                if (this.settings.prevNextMonthDaysVisible) 
                {
                    var nextMonth = month;
                    var nextYear = year;
                    if (month == 12) 
                    {
                        nextMonth = 1;
                        nextYear = prevYear + 1;
                    }
                    else 
                    {
                        nextMonth = nextMonth + 1;
                    }
                    curDate = new Date(nextYear, nextMonth - 1, i - dayOfMonth - daysOfPrevMonth + 2);
                    ht.push(" class='", this.settings.nextMonthCellClass, "'");
                }
            }
            ht.push(">");
            ht.push(this._BuildCell(curDate));
            ht.push("</td>");
            if (i % 7 == 6) 
            {//结束一行
                ht.push("</tr>");
            }
            if (i % 7 == 6 && dayOfMonth - 1 >= totalDays) 
            {
                break;
            }
        }
        return ht.join("");
    },
    _BuildCell: function(curDate)
     {
        var ht = [];
        if (curDate) 
        {
            for (var j = 0; j < this.dateLinkMappings.length; j++) 
            {
                if (Date.parse(this.dateLinkMappings[j].Date) - curDate == 0)
                {
                    ht.push("<a href='", this.dateLinkMappings[j].Link, "'>", curDate.getDate(), "</a>");
                    break;
                }
            }
            if (j == this.dateLinkMappings.length)
            {
                ht.push(curDate.getDate());
            }
        }
        else 
        {
            ht.push("&nbsp;");
        }
        return ht.join("");
    },
    _InitEvent: function(divId, month, year) 
    {
        var t = this;
        document.getElementById(this.containerId + "_prevMonth").style.cursor = "pointer";
        document.getElementById(this.containerId + "_nextMonth").style.cursor = "pointer";        document.getElementById(this.containerId + "_prevMonth").onclick = function() 
        {
            if (month == 1) 
            {
                month = 12;
                year = year - 1;
            }
            else 
            {
                month = month - 1;
            }            t.RenderCalendar(divId, month, year);
        };
        document.getElementById(this.containerId + "_nextMonth").onclick = function()
         {
            if (month == 12) 
            {
                month = 1;
                year = year + 1;
            }
            else 
            {
                month = month + 1;
            }            t.RenderCalendar(divId, month, year);
        };
    },
    //计算指定月的总天数
    _GetTotalDays: function(month, year) 
    {
        if (month == 2) 
        {
            if (this._IsLeapYear(year)) 
            {
                return 29;
            }
            else 
            {
                return 28;
            }
        }
        else if (month == 4 || month == 6 || month == 9 || month == 11) 
        {
            return 30;
        }
        else 
        {
            return 31;
        }
    },
    _GetToalDaysOfPrevMonth: function(month, year) 
    {
        if (month == 1) 
        {
            month = 12;
            year = year - 1;
        }
        else 
        {
            month = month - 1;
        }
        return this._GetTotalDays(month, year);
    },
    //判断是否是闰年
    _IsLeapYear: function(year) 
    {
        return year % 400 == 0 || (year % 4 == 0 && year % 100 != 0);
    }
};
HTML页面代码:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
    <link rel="Stylesheet" href="calendar.css" />
    <style type="text/css">
        body
        {
            font-size: 12px;
        }
    </style>
    <script type="text/javascript" src="Calendar.js">
    </script></head>
<body>
    <div id="calendar">
    </div>    <script type="text/javascript">
        var date = new Date();
        var mapping = [];
        mapping.push(new DateLinkMapping("3-22-2010", "javascript:alert(1)"));
        mapping.push(new DateLinkMapping("4-1-2010", "javascript:alert(1)"))
        Calendar.Init(null, mapping);        Calendar.RenderCalendar("calendar", date.getMonth() + 1, date.getFullYear());
    </script></body>
</html>

解决方案 »

  1.   

    calendar.css代码:.prevMonth, .nextMonth
    {
        color: Gray;
    }
    .calendar td
    {
        width: 3.5em;
        text-align: center;
    }
    .calendar th
    {
        background-color: #D4E3F7;
        font-weight: normal;
    }
    .calendar td a:visited
    {
        color: blue;
    }
    .curDay
    {
        background-color: Gray;
    }
      

  2.   

    My97用过,不能平面显示 是什么意思。My97功能很强大了。建议试用!
      

  3.   

    已经改好了,类似事件的思路,声明后只需定义 Calendar.onClickDate 的处理函数即可!L@_@K
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title></title>
        <link rel="Stylesheet" href="calendar.css" />
        <style type="text/css">
            body
            {
                font-size: 12px;
            }
    .prevMonth, .nextMonth
    {
        color: Gray;
    }
    .calendar td
    {
        width: 3.5em;
        text-align: center;
        cursor: hand;
    }
    .calendar th
    {
        background-color: #D4E3F7;
        font-weight: normal;
    }
    .calendar td a:visited
    {
        color: blue;
    }
    .curDay
    {
        background-color: Gray;
    }    </style>
    <script type="text/javascript">
    <!--
    function DateLinkMapping(date, link) 
    {
        this.Date = date;
        this.Link = link;
    }
    var Calendar = {
        settings:
                {
                    firstDayOfWeek: 1,
                    baseClass: "calendar",
                    curDayClass: "curDay",
                    prevMonthCellClass: "prevMonth",
                    nextMonthCellClass: "nextMonth",
                    curMonthNormalCellClass: "",
                    prevNextMonthDaysVisible: true
                },
        containerId: "",
        weekDayNames: [],
        dateLinkMappings: [],
        CheckedDate: null,
        onClickDate: function() {
            // Custom code.
            // Sample: 
            //alert(this.CheckedDate);
        },
        Init: function(weekDayNames, dateLinkMappings, settings)
         {
            if (!weekDayNames || weekDayNames.length && weekDayNames.length != 7) 
            {
                this.weekDayNames[1] = "一";
                this.weekDayNames[2] = "二";
                this.weekDayNames[3] = "三";
                this.weekDayNames[4] = "四";
                this.weekDayNames[5] = "五";
                this.weekDayNames[6] = "六";
                this.weekDayNames[7] = "日";
            }
            else 
            {
                this.weekDayNames = weekDayNames;
            }
            if (dateLinkMappings) 
            {
                this.dateLinkMappings = dateLinkMappings;
            }
        },
        RenderCalendar: function(divId, month, year) 
        {
            this.containerId = divId;
            var ht = [];        ht.push("<table class='", this.settings.baseClass, "' cellspacing='0' cellpadding='0' border='0'>");
            ht.push(this._RenderTitle(month, year));
            ht.push(this._RenderBody(month, year));
            ht.push("</table>");        document.getElementById(divId).innerHTML = ht.join("");
            this._InitEvent(divId, month, year);
        },
        _RenderTitle: function(month, year) 
        {
            var ht = [];
            //日期
            ht.push("<tr>");
            ht.push("<th colspan='7' style='width:100%;'><div style='float:left;width:10%;text-align:center;' id='", this.containerId, "_prevMonth' title='上一月'><</div><div style='float:left;text-align:center;width:80%'>", year, "年", month, "月</div><div style='float:right;width:10%; text-align:center;' id='", this.containerId, "_nextMonth' title='下一月'>></div></th>");
            ht.push("</tr>");
            //星期
            ht.push("<tr>");
            for (var i = 0; i < 7; i++) 
            {
                var day = (i + this.settings.firstDayOfWeek) == 7 ? 7 : (i + this.settings.firstDayOfWeek) % 7;
                ht.push("<th>", this.weekDayNames[day], "</th>")
            }
            ht.push("</tr>");
            return ht.join("");
        },
        _RenderBody: function(month, year) 
        {
            var date = new Date(year, month - 1, 1);
            var day = date.getDay();
            var dayOfMonth = 1;
            var daysOfPrevMonth = (7 - this.settings.firstDayOfWeek + day) % 7;
            var totalDays = this._GetTotalDays(month, year);
            var totalDaysOfPrevMonth = this._GetToalDaysOfPrevMonth(month, year);
            var ht = [];
            var curDate;        for (var i = 0; ; i++) 
            {
                curDate = null;
                if (i % 7 == 0) 
                {//新起一行
                    ht.push("<tr>");
                }
                ht.push("<td onclick='Calendar.CheckedDate=new Date(parseInt(this.value)); Calendar.onClickDate();' ");
                if (i >= daysOfPrevMonth && dayOfMonth <= totalDays) 
                {//本月
                    curDate = new Date(year, month - 1, dayOfMonth);
                    ht.push(" value='", curDate.valueOf(), "'");
                    if (Date.parse(new Date().toDateString()) - curDate == 0)
                    {
                        ht.push(" class='", this.settings.curDayClass, "'");
                    }
                    else 
                    {
                        ht.push(" class='", this.settings.curMonthNormalCellClass, "'");
                    }
                    dayOfMonth++;
                }
                else if (i < daysOfPrevMonth) 
                {//上月
                    if (this.settings.prevNextMonthDaysVisible)
                     {
                        var prevMonth = month;
                        var prevYear = year;
                        if (month == 1) 
                        {
                            prevMonth = 12;
                            prevYear = prevYear - 1;
                        }
                        else 
                        {
                            prevMonth = prevMonth - 1;
                        }
                        curDate = new Date(prevYear, prevMonth - 1, totalDaysOfPrevMonth - (daysOfPrevMonth - i - 1));
                        ht.push(" value='", curDate.valueOf(), "'");
                        ht.push(" class='", this.settings.prevMonthCellClass, "'");
                    }
                }
                else 
                {//下月
                    if (this.settings.prevNextMonthDaysVisible) 
                    {
                        var nextMonth = month;
                        var nextYear = year;
                        if (month == 12) 
                        {
                            nextMonth = 1;
                            nextYear = prevYear + 1;
                        }
                        else 
                        {
                            nextMonth = nextMonth + 1;
                        }
                        curDate = new Date(nextYear, nextMonth - 1, i - dayOfMonth - daysOfPrevMonth + 2);
                        ht.push(" value='", curDate.valueOf(), "'");
                        ht.push(" class='", this.settings.nextMonthCellClass, "'");
                    }
                }
                ht.push(">");
                ht.push(this._BuildCell(curDate));
                ht.push("</td>");
                if (i % 7 == 6) 
                {//结束一行
                    ht.push("</tr>");
                }
                if (i % 7 == 6 && dayOfMonth - 1 >= totalDays) 
                {
                    break;
                }
            }
            return ht.join("");
        },
        _BuildCell: function(curDate)
         {
            var ht = [];
            if (curDate) 
            {
                for (var j = 0; j < this.dateLinkMappings.length; j++) 
                {
                    if (Date.parse(this.dateLinkMappings[j].Date) - curDate == 0)
                    {
                        ht.push("<a href='", this.dateLinkMappings[j].Link, "'>", curDate.getDate(), "</a>");
                        break;
                    }
                }
                if (j == this.dateLinkMappings.length)
                {
                    ht.push(curDate.getDate());
                }
            }
            else 
            {
                ht.push("&nbsp;");
            }
            return ht.join("");
        },
        _InitEvent: function(divId, month, year) 
        {
            var t = this;
            document.getElementById(this.containerId + "_prevMonth").style.cursor = "pointer";
            document.getElementById(this.containerId + "_nextMonth").style.cursor = "pointer";        document.getElementById(this.containerId + "_prevMonth").onclick = function() 
            {
                if (month == 1) 
                {
                    month = 12;
                    year = year - 1;
                }
                else 
                {
                    month = month - 1;
                }            t.RenderCalendar(divId, month, year);
            };
            document.getElementById(this.containerId + "_nextMonth").onclick = function()
             {
                if (month == 12) 
                {
                    month = 1;
                    year = year + 1;
                }
                else 
                {
                    month = month + 1;
                }            t.RenderCalendar(divId, month, year);
            };
        },
        //计算指定月的总天数
        _GetTotalDays: function(month, year) 
        {
            if (month == 2) 
            {
                if (this._IsLeapYear(year)) 
                {
                    return 29;
                }
                else 
                {
                    return 28;
                }
            }
            else if (month == 4 || month == 6 || month == 9 || month == 11) 
            {
                return 30;
            }
            else 
            {
                return 31;
            }
        },
        _GetToalDaysOfPrevMonth: function(month, year) 
        {
            if (month == 1) 
            {
                month = 12;
                year = year - 1;
            }
            else 
            {
                month = month - 1;
            }
            return this._GetTotalDays(month, year);
        },
        //判断是否是闰年
        _IsLeapYear: function(year) 
        {
            return year % 400 == 0 || (year % 4 == 0 && year % 100 != 0);
        }
    };//-->
    </script></head>
    </html>
      

  4.   

    内容太长了,这是 body 部分,放入 </head> 与 </html> 之间即可!L@_@K
    <body>
        <div id="calendar">
        </div>    <script type="text/javascript">
            var date = new Date();
            var mapping = [];
            mapping.push(new DateLinkMapping("3-22-2010", "javascript:alert(1)"));
            mapping.push(new DateLinkMapping("4-1-2010", "javascript:alert(1)"))
            Calendar.Init(null, mapping);        Calendar.RenderCalendar("calendar", date.getMonth() + 1, date.getFullYear());        Calendar.onClickDate = function() {
                alert(this.CheckedDate);
                alert(this.CheckedDate.toLocaleString());
                var d = this.CheckedDate;
                var yyyymmdd = d.getFullYear() + "-";
                    yyyymmdd += (d.getMonth() + 1) + "-";
                    yyyymmdd += d.getDate();
                alert(yyyymmdd);
            };
        </script></body>
      

  5.   

    yixianggao
     
    (一名程序员) 
    --------------------------------
    你太牛了,学习了
      

  6.   

    lz 过奖了,熟能生巧罢了。关键是赶紧散分,哈哈另,赠 Web 开发常用手册DHTML 参考手册
    http://download.csdn.net/source/308913JScript 语言参考
    http://download.csdn.net/source/308916CCS 样式表中文手册
    http://download.csdn.net/source/304124