jq双日历--最终版(功能兼容IE5,样式兼容IE6)

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>双日历选择</title>
    <link rel="stylesheet" href="double-date.css"/>
    <script src="jquery-1.11.3.min.js"></script>
    <script src="double-date.js"></script>

</head>
<body>
<div class="outer clearfix">
    <div class="date date1 fl" id="from">
        <input type="text" class="date-check"/>
    </div>
    <div class="date fr" id="to">
        <input type="text" class="date-check"/>
    </div>
</div>
</body>
</html>

html

*{
    margin:0;
    padding:0;
    box-sizing:border-box;
}
table{
    border-collapse: collapse;
    table-layout: fixed;
}
.clearfix{
    zoom:1;
}
.clearfix:after{
    content:".";
    display:block;
    width:0;
    height:0;
    visibility:hidden;
    clear: both;
}
.fl{
    float:left;
}
.fr{
    float:right;
}
.date{
    position:relative;
}
.date-check{
    width:180px;
    height:30px;
    line-height:30px;
    border:1px solid #ccc;
    padding:0 5px;
}
.date-list{
    display:none;
    position:absolute;
    top:30px;
    padding-top:10px;
    background: #FED;
    border-radius:5px;
    -webkit-border-radius:5px;
    overflow:hidden;
    border:1px solid;
    border-color:#ccc  #ccc transparent  #ccc;
    z-index: 999;
}
.header{
    margin-bottom:4px;
    padding: 0 5px;
}
.header .fl{
    margin-right:5px;
}
.header .fl,.header .fr{
    cursor:pointer;
}
.header select{
    padding: 2px 0;
    vertical-align:top;
}

.header-right{
    margin-right:8px;
}
.header-left,.header-right{
    border-radius: 50%;
    width: 20px;
    height: 20px;
    text-align: center;
    vertical-align: middle;
    border: 1px solid #ccc;
    line-height: 18px;
}
.today{
    padding:2px 5px;
    border:1px solid #ccc;
    border-radius:5px;
    background:#ccc;
    color:#fff;
    font-size:12px;
    *width:24px;
    *height:16px;
    *line-height:16px;
}
.date-list,.date-list table{
    width:216px;
}

.date-list thead{
    background:#00cdec;
}
.date-list th{
    padding:2px;
    color:#fff;
    border:1px solid #ccc;
    font-size: 14px;
    font-weight: normal;
}
.date-list td{
    border:1px solid #ccc;
    padding:2px 0;
    text-align:center;
    font-size: 12px;
}
.date-list td:hover{
    background:#ccc;
    color:#fff;
}
.date-list td.current{
    background:#00cdec;
    color:#fff;
}

.outer{
    width:400px;
    margin:20px auto;
}
.date1{
    margin-bottom:30px;
}
.date-error .date-check{
    border:1px solid red;
}

double-date.css

$(function(){
    var dateStr=‘<div class="date-list"><div class="header clearfix"><div class="header-left fl">&lt;</div><div class="fl"><select class="year"></select></div><div class="fl"><select class="month"><option value="1">1月</option><option value="2">2月</option><option value="3">3月</option><option value="4">4月</option><option value="5">5月</option><option value="6">6月</option><option value="7">7月</option><option value="8">8月</option><option value="9">9月</option><option value="10">10月</option><option value="11">11月</option><option value="12">12月</option></select></div><div class="header-right fl">&gt;</div><div class="fr today">今日</div></div><table><thead><tr><th>一</th><th>二</th><th>三</th><th>四</th><th>五</th><th>六</th><th>日</th></tr></thead><tbody><tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr></tbody></table></div>‘
    $(dateStr).appendTo($(".date"));
    var $y = $(".year"), $m = $(".month"),
        $year = $y.val(),
        $month = $m.val(),
        current = new Date(),
        current_year = current.getFullYear(),
        current_month = current.getMonth() + 1,
        current_date = current.getDate();
    $m.val(current_month);
    $y.val(current_year);
    for(var i=1917;i<2118;i++){
        var opt = ‘‘;
        opt += "<option>" + i + "</option>";
        $(opt).appendTo($y);

    }
    $y.val(current_year);
    show();
    function show() {
        $(".date").each(function () {
            var $y = $(this).find(".year"), $m = $(this).find(".month");
            var year = $(this).find(".year").val(), month = $(this).find(".month").val();
            var dates = new Date(year, month, 0).getDate();
            //根据年份和月份获取当月第一天的日期
            date = new Date(new Date(year, month - 1, 1));
            //根据年份和月份获取当月第一天是星期几:
            var firstDay = date.getDay();
            if (firstDay == 0) {
                firstDay = 7;
            }
            var num = 1;
            $(this).find("td").each(function () {
                $(this).removeClass("current");
                var $eq = $(this).index() + 1;
                //给td赋值
                if ($eq < firstDay && $(this).parent("tr").index() === 0) {
                    $(this).html("");
                } else {
                    if (num <= dates) {
                        $(this).html(num);
                        num++
                    } else {
                        $(this).html("")
                    }
                }
                //去掉内容为空的tr
                if ($(this).html() == "" && $(this).siblings().html() == "") {
                    $(this).parents("tr").css("display", "none");
                } else {
                    $(this).parents("tr").css("display", "table-row")
                }
                if ($y.val() == current_year && $m.val() == current_month && $(this).html() == current_date) {
                    $(this).addClass("current");
                } else {
                    $(this).removeClass("current")
                }
            });
            num = 1;
        });
    }

    var date = new Date();
    //点击今日跳转到今日列表
    $(".today").on("click", function () {
        $y.val(current_year);
        $m.val(current_month);
        show();
        $(this).parents(".date-list").css("display", "none").siblings(".date-check").val(current_year + "-" + zero(current_month) + "-" + zero(current_date));
    });
    $(".header select").on("change", function () {
        show();
    });
    var flag = 0;
    $(".date-list").hover(function () {
        flag = 0;
    }, function () {
        flag = 1;
    });
    //input框获得焦点,让日历显示。失去焦点后,让日历隐藏
    $(".date-check").each(function () {
        $(this).on("focus", function () {
            var $outer = $(this).siblings(".date-list"),
                $this_input = $(this);
            $outer.css("display", "block");
            $outer.find("td").each(function () {
                var $this_td = $(this);
                $this_td.on("click", function () {
                    var $input_year = $(this).parents(".date-list").find(".year").val(),
                        $input_month = $(this).parents(".date-list").find(".month").val(),
                        $input_val = $(this).html(),
                        date_str = "";
                    if ($this_td.html() != "") {
                        date_str += $input_year + "-" + zero($input_month) + "-" + zero($input_val);
                        $this_input.val(date_str);
                        $outer.css("display", "none");
                    }
                })
            })
        });
        $(this).on("blur", function () {
            if (flag == 1) {
                $(this).siblings(".date-list").css("display", "none");
                flag = 0;
            }
        })
    });
    //月份和日期小于10的补0
    function zero(num) {
        return num >= 10 ? num : "0" + num;
    }
    $("#from td,#to td,#from .today,#to .today").on("click",function(){
        var d_year=$(this).parents(".date-list").find(".year").val(),
            d_month=$(this).parents(".date-list").find(".month").val(),
            $td_val;
        if($(this).prop("tagName").toLowerCase()=="td"){
            $td_val =$(this).html();
            if($td_val!=""){
                var str=d_year+"-"+d_month+"-"+$td_val;
                $(this).parents(".date-list").siblings(".date-check").val(str);
            }
        }
        var $from=$("#from .date-check").val(),$to=$("#to .date-check").val();
        var from_seconds=new Date($from.replace("-", "/").replace("-", "/")).getTime(),to_seconds=new Date($to.replace("-", "/").replace("-", "/")).getTime();
        if($from!="" && $to !=""){
            if(from_seconds>to_seconds){
                alert("起始日期不能大于结束日期!");
                $("#from,#to").addClass("date-error");
            }else{
                $("#from,#to").removeClass("date-error");
            }
        }
    });
    $(".header-left").on("click",function(){
        var $year=parseInt($(this).parents(".header").find(".year").val());
        var $mon=parseInt($(this).parents(".header").find(".month").val());
        if($mon>=2){
            $mon-=1;
        }else{
            $year-=1;
            $mon=12;
            $(this).parents(".header").find(".month").val($mon);
            $(this).parents(".header").find(".year").val($year)
        }
        $(this).parents(".header").find(".month").val($mon);
        show();
    });
    $(".header-right").on("click",function(){
        var $year=parseInt($(this).parents(".header").find(".year").val());
        var $mon=parseInt($(this).parents(".header").find(".month").val());
        if($mon<12){
            $mon+=1;
        }else{
            $year+=1;
            $mon=1;
            $(this).parents(".header").find(".month").val($mon);
            $(this).parents(".header").find(".year").val($year)
        }
        $(this).parents(".header").find(".month").val($mon);
        show();

    });
    document.body.onselectstart=document.body.ondrag=function(){
        return false;

    }
})

double-date.js

时间: 2024-10-07 13:19:05

jq双日历--最终版(功能兼容IE5,样式兼容IE6)的相关文章

jQuery 3.0最终版发布,十大新特性眼前一亮

jQuery 3.0在日前发布了最终的全新版本.从2014年10月,jQuery团队对这个主要大版本进行维护开始,web开发者社区便一直在期待着这一刻的到来,终于在2016年6月他们迎来了这一个最终版www.lampbrother.net. 通过jQuery 3.0的版本更新说明,我们看到了一个保持着向后兼容的更轻便,更快速的jQuery.在本文中,我们将介绍一些令人眼前一亮的jQuery 3.0全新特性. 开始前的说明 如果你想要下载jQuery 3.0进行亲自实验,可以通过该页面进行下载.另

css样式兼容不同浏览器问题解决办法

在网站设计的时候,应该注意css样式兼容不同浏览器问题,特别是对完全使用DIV CSS设计的网站,就应该更注意IE6 IE7 FF对CSS样式的兼容,不然,你的网乱可能出去不想出现的效果! 所有浏览器 通用 height: 100px; IE6 专用 _height: 100px; IE6 专用 *height: 100px; IE7 专用 *+height: 100px; IE7.FF 共用 height: 100px !important; 一.CSS HACK 1, !important

我们还需要兼容IE样式问题吗?

是否还需要考虑IE的样式兼容问题? 这几天研究html5boilerplate,从中学到了很多东西,其中一个就是关于旧的IE的样式兼容问题.但是,在H5高速发展的今天,是否有必要再关注这个问题呢?先上几张图: 这是有百度统计提供的最近三个月的浏览器以及操作系统分布情况,感谢百度.从图中我们看出,ie6的占比还高达5%,而ie7高达4%,ie8更是高达25.3%.究其原因,xp的在操作系统的市场占有量依然是最高的,达到44.4%,半壁江山.可见兼容旧版本的IE的样式还是很有必要的. 那么,要兼顾I

最终版的Web(Python实现)

天啦,要考试了,要期末考试了,今天把最终版的Python搭建Web代码先写这里记下了.详细的过程先不写了. 这次是在前面的基础上重写 HTTPServer 与 BaseHTTPRequestHandler,主要利用 python 提供 的 socket 进行编程,从而实现消息的接收与相应:然后再接着引入多线程,分别处理来自客户端的请求:最后实现根据客户端传递的参数动态生成页面的功能. 主要步骤如下: 一. .重写 HTTPServer 与 BaseHTTPRequestHandlerPython

理解《JavaScript设计模式与开发应用》发布-订阅模式的最终版代码

最近拜读了曾探所著的<JavaScript设计模式与开发应用>一书,在读到发布-订阅模式一章时,作者不仅给出了基本模式的通用版本的发布-订阅模式的代码,最后还做出了扩展,给该模式增加了离线空间功能和命名空间功能,以达到先发布再订阅的功能和防止名称冲突的效果.但是令人感到遗憾的是最终代码并没有给出足够的注释.这让像我一样的小白就感到非常的困惑,于是我将这份最终代码仔细研究了一下,并给出了自己的一些理解,鉴于能力有限,文中观点可能并不完全正确,望看到的大大们不吝赐教,谢谢! 下面是添加了个人注释的

CSS hack样式兼容模式收藏

part1 —— 浏览器测试仪器,测试您现在使用的浏览器类型 IE6   IE7   IE8   Firefox   Opera   Safari (Chrome)   IE6   IE7   IE8   Firefox   Opera   Safari (Chrome)   您现在使用的浏览器是Opera.Opera游览器很时髦么. 您现在使用的浏览器是Firefox.Firefox是很强大的游览器. 您现在使用的浏览器是Safari(Chrome).Safari和Chrome使用的都是Web

结对项目--四则运算图形化最终版

四则运算器图形化最终版 (然而被我做成了奇怪的东西 组员:13070030张博文 13070033刘云峰 一.概念阶段 最初是想试试用android做个计算器app,无奈从零学起着实太赶,而且这个计划在试用了无比卡顿占内存的android studio后就彻底搁浅了. 然后就被路人谣传说MFC好用,无奈从零学起着实太赶,而且这个计划在无人指导的摸黑下也顺手搁浅了. 最终便沦为了EasyX旧传统,好歹有点基础,但果然还是不太甘心. 以及因为当初想做app,所以抠了iphone计算器的图想当UI,结

成为C++高手之最终版计算器

下面做我们的计算器最终版. 当前还存在的问题是用户只能算一次.如果有人买一个一次性计算器,那么他肯定是个土豪.我们的计算器不能只给土豪用,所以要改成可以反复使用的. 使用循环语句就可以了,但是循环哪些代码呢?从用户输入到打印出结果这个过程要反复执行,代码如是: enum OPT{ jia = 1, jian, cheng, chu }; int main(void) { //保存用户输入的数 int number1; int number2; int opt;//运算符 //循环从输入到输出结果

Web Uploader - 功能齐全,完美兼容 IE 的上传组件

文件上传是网站和 Web 应用程序的常用功能,一直没有一款完美的文件上传组件,因此让很多开发人员碰到头疼的浏览器兼容问题. WebUploader 是由 Baidu FEX 团队开发的一款以 HTML5 为主,FLASH 为辅的现代文件上传组件.在现代的浏览器里面能充分发挥 HTML5 的优势,同时又不摒弃主流IE浏览器,沿用原来的 FLASH 运行时,兼容 IE6+,iOS 6+, android 4+.采用大文件分片并发上传,极大的提高了文件上传效率. 源码下载      在线演示 特性 分