web组件-日历控件

<input type="text" id="calendar" readonly/>
<div class="mod dn" id="mod">
    <div class="hd">
        <button class="prev_year" id="prev_year">&lt;&lt;</button>
        <button class="prev_month" id="prev_month">&lt;</button>
        <input type="text" class="year" id="year" readonly/>年
        <input type="text" class="month" id="month" readonly/>月
        <button class="next_month" id="next_month">&gt;</button>
        <button class="next_year" id="next_year">&gt;&gt;</button>
    </div>
    <div class="bd">
        <table>
            <thead>
                <tr>
                    <th>日</th>
                    <th>一</th>
                    <th>二</th>
                    <th>三</th>
                    <th>四</th>
                    <th>五</th>
                    <th>六</th>
                </tr>
            </thead>
            <tbody id="tbody">
                <tr>
                    <td>1</td>
                    <td>1</td>
                    <td>1</td>
                    <td>1</td>
                    <td>1</td>
                    <td>1</td>
                    <td>1</td>
                </tr>
                <tr>
                    <td>1</td>
                    <td>1</td>
                    <td>1</td>
                    <td>1</td>
                    <td>1</td>
                    <td>1</td>
                    <td>1</td>
                </tr>
                <tr>
                    <td>1</td>
                    <td>1</td>
                    <td>1</td>
                    <td>1</td>
                    <td>1</td>
                    <td>1</td>
                    <td>1</td>
                </tr>
                <tr>
                    <td>1</td>
                    <td>1</td>
                    <td>1</td>
                    <td>1</td>
                    <td>1</td>
                    <td>1</td>
                    <td>1</td>
                </tr>
                <tr>
                    <td>1</td>
                    <td>1</td>
                    <td>1</td>
                    <td>1</td>
                    <td>1</td>
                    <td>1</td>
                    <td>1</td>
                </tr>
                <tr>
                    <td>1</td>
                    <td>1</td>
                    <td>1</td>
                    <td>1</td>
                    <td>1</td>
                    <td>1</td>
                    <td>1</td>
                </tr>
            </tbody>
        </table>
    </div>
</div>
*{margin:0;padding:0}
.dn{display:none}
.mod .month,.mod .year{width:50px;height:30px;line-height:30px;text-align:center}
.mod button{width:30px;height:30px}
.mod table{width:300px;text-align:center;cursor:pointer}
.mod table tr{height:30px}
.mod .red{background:red}
.mod table td:hover{background:red}
function id(id){
    return document.getElementById(id);
}
id(‘calendar‘).onclick= function () {
  id(‘mod‘).classList.remove(‘dn‘);
  var today=new Date(),
      year=today.getFullYear(),
      month=today.getMonth()+ 1, //0-11
      date=today.getDate(),     //1-31
      firstday=new Date(year,month-1,1).getDay(),//new Date(2001,7,9)== 2001年8月9日; getDay 返回周日=0,周一=1;
      monthdays=0;
    /*初始化年月日*/
    id(‘year‘).value=year;
    id(‘month‘).value=month;

    monthdays=calmonthday(month);

    var tds=toArray(document.getElementsByTagName(‘td‘));
    tds.forEach(function (element) {
       element.innerHTML=‘‘;
    });

    for(var i=0;i<monthdays;i++){
        tds[firstday+i].innerHTML=i+1;
    }
    tds[date-1].classList.add(‘red‘);

    /*事件委托获取日期并输入到input*/

    var tbody=document.getElementById(‘tbody‘);
    tbody.onclick = function (e) {
        var e = e || window.event;
        var target = e.target || e.srcElement,
            targetContent = parseInt(target.innerHTML);
        if (/\d+/.test(targetContent)) {
            id(‘calendar‘).value = year + ‘-‘ + month + ‘-‘ + targetContent;
            id(‘mod‘).classList.add(‘dn‘);
        }
    };

    /*上一年按钮*/
    id(‘prev_year‘).onclick= function () {
        year-=1;
        id(‘year‘).value=year;
        id(‘month‘).value=month;
        tds.forEach(function (element) {
            element.innerHTML=‘‘;
        });
        firstday=new Date(year,month-1,1).getDay();
        for(var i=0;i<monthdays;i++){
            tds[firstday+i].innerHTML=i+1;
        }
        tds[date-1].classList.remove(‘red‘);
    }
    /*上个月按钮*/
    id(‘prev_month‘).onclick= function () {
        month-=1;
        if(month<=0){
            month=11;
            year--;
        }else{
            month--;
        }
        monthdays=calmonthday(month);
        tds.forEach(function (element) {
            element.innerHTML=‘‘;
        });
        id(‘year‘).value=year;
        id(‘month‘).value=month;
        firstday=new Date(year,month-1,1).getDay();
        for(var i=0;i<monthdays;i++){
            tds[firstday+i].innerHTML=i+1;
        }
        tds[date-1].classList.remove(‘red‘);
    }
    /*下个月按钮*/
    id(‘next_month‘).onclick= function () {
        if(month>=12){
            month=1;
            year++;
        }else{
            month++;
        }
        monthdays=calmonthday(month);
        tds.forEach(function (element) {
            element.innerHTML=‘‘;
        });
        id(‘year‘).value=year;
        id(‘month‘).value=month;
        firstday=new Date(year,month-1,1).getDay();
        for(var i=0;i<monthdays;i++){
            tds[firstday+i].innerHTML=i+1;
        }
        tds[date-1].classList.remove(‘red‘);
    }
    /*下一年按钮*/
    id(‘next_year‘).onclick= function () {
        year++;
        id(‘year‘).value=year;
        id(‘month‘).value=month;
        tds.forEach(function (element) {
            element.innerHTML=‘‘;
        });
        firstday=new Date(year,month-1,1).getDay();
        for(var i=0;i<monthdays;i++){
            tds[firstday+i].innerHTML=i+1;
        }
        tds[date-1].classList.remove(‘red‘);
    }
};

function isLeapYear(iYear) {
    if (iYear % 4 == 0 && iYear % 100 != 0) {
        return true;
    } else {
        if (iYear % 400 == 0) {
            return true;
        } else {
            return false;
        }
    }
}
function calmonthday(month){
    var monthdays;
    switch (month){
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 12:
            monthdays=31;
            break;
        case 4:
        case 6:
        case 9:
        case 11:
            monthdays=30;
            break;
        case 2:
            if(isLeapYear(year)){
                monthdays=29
            }else{
                monthdays=28;
            }
            break;
    }
    return monthdays;
}
function toArray(arr){
    return Array.prototype.slice.call(arr);
}

另附上其他日历控件:

1.https://github.com/tianxiangbing/calendar

时间: 2024-08-27 08:27:43

web组件-日历控件的相关文章

Atitit..组件化事件化的编程模型--(2)---------Web datagridview 服务器端控件的实现原理and总结

Atitit..组件化事件化的编程模型--(2)---------Web datagridview 服务器端控件的实现原理and总结 1. 服务端table控件的几个流程周期 1 1.1. 确认要显示的字段(开始渲染) 1 1.2. 确认要显示的title 1 1.3. 格式化 1 2. Render显示级别 1 2.1. 简单化...grid.toHTML(); 1 2.2. 有些设置(title,field) 1 2.3. 完全的的设置(模板机制) 1 3. 服务器端控件跟模板的分离实现 2

Flex自定义组件开发之日周月日期选择日历控件

原文:Flex自定义组件开发之日周月日期选择日历控件 使用过DateField的我们都知道,DateField 控件是用于显示日期的文本字段,字段右侧带有日历图标.当用户在控件边框内的任一位置单击时,将弹出一个 DateChooser 控件,显示当月的所有日期.如果未选择日期,则该文本字段为空白,并且 DateChooser 控件中将显示当前日期的月份.当 DateChooser 控件处于打开状态时,用户可以在各个月份和年份之间滚动,并选择某个日期.选择日期后,DateChooser 控件关闭,

Android自定义组件之日历控件-精美日历实现(内容、样式可扩展)

需求 我们知道,Android系统本身有自带的日历控件,网络上也有很多开源的日历控件资源,但是这些日历控件往往样式较单一,API较多,不易于在实际项目中扩展并实现出符合具体样式风格的,内容可定制的效果.本文通过自定义日历控件,实现了在内容和样式上可高度扩展的精美日历demo,有需要的Android应用开发人员可迅速移植并按需扩展实现. 在某个应用中,需要查询用户的历史考勤记录,根据实际考勤数据在日历中标记出不同的状态(如正常出勤.请假.迟到等),并在页面中显示相应的说明文字. 效果 实现的效果如

利用JS实现Web日历控件(包括日期和时间)

1.由于项目需要,需要一个精确到分钟的日历控件,具体如下图所示. 2.具体包括WebCalendar.js和一个schedule.jsp两个文件,源码如下. (1)WebCalendar.js var cal; var isFocus=false; //是否为焦点 var pickMode ={ "second":1, "minute":2, "hour":3, "day":4, "month":5, &q

多年前自创的一个网页日历控件

现在框架流行,很多常用网页控件都开发好了供人调用,如JQuery的Calendar,美观方便. 多年前我也自己闭门造车弄出个日历控件,再用在哪里已然是不可能,权且当做老照片挂起来,有空凭吊一下. 下载地址在: http://pan.baidu.com/s/1sjuLD17 下载下来是个JavaWeb工程,放Tomcat里就可以使用的.(为什么要弄个Web工程而不是html包,因为include在html里面不好用.) 日历控件代码和图片都在WebRoot下的calendar目录里. WebRoo

jquery M97-datepicker日历控件

My97DatePicker是一款非常灵活好用的日期控件.使用非常简单. 1.下载My97DatePicker组件包 2.在页面中引入该组件js文件:     <script type="text/javascript" src="My97DatePicker/WdatePicker.js"></script> 3.页面使用两个方式:     常规调用:  <input id="d11" type="tex

Web 开发工具控件ASPxperience Suite

ASPxperience Suite 是我们下一代的 Web 开发工具控件,可以为客户带来更多优秀体验,包括导航.数据布局管理以及嵌在 Web 应用程序中的浮动控件的应用.它从底层编写,然后使用支持 ASP.NET 2.0 Framework ,并且完全支持 out-of-the-box AJAX .此产品包含在产品集合 DXperience Universal Subscription 中. 具体功能: 包含在 ASPxperience Suite 中的控件只产生少量的 HTML 代码 可以根

ASP.NET列表生成组件DbNetList控件下载及介绍

DbNetList是一个综合功能的列表选择组件,作为动态HTML(DHTML)实现.运用DbNetList,你可以快速为自己的web页面添加数据库驱动的列表.下拉式列表(drop-down).树型和复选框列表.DbNetList兼容最流行的各种数据库服务器,包括:SQL Server.Oracle和Informix. 具体功能: 生成列表.多列列表.下拉式列表(drop-down).树型列表.复选框列表... 提供ASP 和 ASP.NET的本地版本. 基于浏览器.无论何处均可设计和运行.无需客

bootstrap中使用日历控件

在bootstrap中使用日历控件可以参照以下资料: http://www.bootcss.com/p/bootstrap-datetimepicker/index.htm 以下是参照此资料自己做的一个demo: 关于资料中的依赖,截图如下: 关于把Less编译成css,需要安装node, 需要注意的是要定位到build文件夹,然后执行 lessc build_standalone.less  datetimepicker.css 大概意思就是把build_standalone.less转换成c