JQuery之应用篇一

        上一篇文章中介绍了JQuery的一些简单语句(JQuery小集合),今天打算通过项目中的一个小功能讲一讲如何应用,希望能达到抛砖引玉的效果,呵呵

        先讲讲这个小功能要实现什么吧,见下图:
       

       

         如图所见,选择起始、结束时间后,根据对比方式的选项,自动填充比较时段里面的Checkbox内容
         图中4个内容对应的Id分别是begin、end、datedepart、db_b1(为加载Checkbox的div的Id,Checkbox的name为timespan).
 
        首先,肯定要先得到时间段,我们用JQuery的ID选择器来获取:
        var begin = new Date($('#begin').val().replace('-', '/').replace('-', '/'));
          var end = new Date($('#end').val().replace('-', '/').replace('-', '/'));
 
        由于JavaScript中时间的格式是2012/04/17的,所以我们这里还用了字符串的替换,将-替换成了/,使它能顺利转换成时间对象。便于接下来我们的分解。将该时间段分解成 年、月、周、日 四部分,便于我们获取:
      var beginYear = begin.getFullYear();
        var beginMonth = begin.getMonth()+1;
        var beginWeek = getYearWeek(begin);
        var beginDay = begin.getDate();
 
     var endYear = end.getFullYear();
     var endMonth = end.getMonth()+1;
   var endWeek = getYearWeek(end);
     var endDay = end.getDate();
 
        getFullYear、getMonth、getDate分别是JavaScript中时间自带的函数,用于获取年月日;JavaScript中没有获取周的函数,所以我们自定义了一个获取周的函数getYearWeek,用于获取指定日期在一年当中所在的周数,函数体如下:
        var getYearWeek = function (date) {
    /*   
        date1是当前日期   
        date2是当年第一天   
        d是当前日期是今年第多少天   
        用d + 当前年的第一天的周差距的和在除以7就是本年第几周   
        */
        var date1 = new Date(date), 
        date2 = new Date(new Date(date).getFullYear(), 0, 1),
        d = Math.round((date1.valueOf() - date2.valueOf()) / 86400000);
        return Math.ceil( ( d + ( (date2.getDay() + 1) - 1) ) / 7 );
    };
    时间分解完毕后,接下来就要获取下拉框选中的值了,同样的,我们也用ID选择器来获取:
    var SelectValue = $("#datedepart").val();
    所有这些数据准备好后,就可以开始填充Checkbox了,下面直接贴代码,我在代码中注释说明:
    switch (CheckValue) {
                        case "yy":
                            //定义要插入的html对象
                                                             var html = "";                
for (; beginYear <= endYear; beginYear++) {
                                //为Checkbox的赋值
var value = beginYear + "年";  
                                //GetValue为自定义函数,返回构建好的html语句      
                                html += GetValue(value);                    
}
                            //将html语句插入到比较时间段的div里面
                            $('#db_b1').html(html);
                            break;
                        case "mm":
                            var html = "";
                            for (; beginYear <= endYear; beginYear++) {
                                //如果beginYear不等于endYear那么beginYear有12个月,等于时就只能小于等于endMonth,周跟日的判断原理跟这相同。
                                if (beginYear != endYear) {
                                    for (; beginMonth <= 12; beginMonth++) {
                                        var value = beginYear + "年" + beginMonth + "月";
                                        
                                        html += GetValue(value);
                                    }
                                }
                                else {
                                    for (; beginMonth <= endMonth; beginMonth++) {
                                        var value = beginYear + "年" + beginMonth + "月";
                                        
                                        html += Getvalue(value);
                                    }
                                }
                                beginMonth = 1;
                            }
                            $('#db_b1').html(html);
                            break;
                        case "ww":
                            var html = "";

                            for (; beginYear <= endYear; beginYear++) {
                                if (beginYear != endYear) {
                                    for (; beginWeek <= getYearWeek(new Date(beginYear, 12, 0)); beginWeek++) {
                                        var value = beginYear + "年" + beginWeek + "周";
                                        html += GetValue(value);
                                    }
                                }
                                else {
                                    for (; beginWeek <= endWeek; beginWeek++) {
                                        var value = beginYear + "年" + beginWeek + "周";
                                        html += GetValue(value);
                                    }
                                }
                                beginWeek = 1;
                            }
                            $('#db_b1').html(html);
                            break;
                        case "dy":
                            var html = "";
                            for (; beginYear <= endYear; beginYear++) {
                                if (beginYear != endYear) {
                                    for (; beginMonth <= 12; beginMonth++) {

                                        for (; beginDay <= new Date(beginYear, beginMonth, 0).getDate(); beginDay++) {
                                            var value = beginYear + "年" + beginMonth + "月" + beginDay + "日";
                                            html += GetValue(value);
                                        }
                                        beginDay = 1;
                                    }
                                }
                                else {
                                    for (; beginMonth <= endMonth; beginMonth++) {
                                        if (beginMonth != endMonth) {
                                            for (; beginDay <= new Date(beginYear, beginMonth, 0).getDate(); beginDay++) {
                                                var value = beginYear + "年" + beginMonth + "月" + beginDay + "日";
                                                html += GetValue(value);
                                            }
                                        }
                                        else {
                                            for (; beginDay <= endDay; beginDay++) {
                                                var value = beginYear + "年" + beginMonth + "月" + beginDay + "日";
                                                html += GetValue(value);
                                            }
                                        }
                                        beginDay = 1;
                                    }
                                }
                                beginMonth = 1;
                            }
                            $('#db_b1').html(html);
                            break;
                    }
    }
    //自定义函数,返回组建的html语句
function GetValue(value)
{
	return '<li><input name="timespan" id="timespan" onclick="eachClick(\'timespan\',\'AllTimeSpan\')" type="checkbox" value="' + value + '" />&nbsp;' + value + '</li>';
}
这里还有个全选的效果,每一个选项都选上,所有自动选上,随便去掉一项,所有自动取消选中,代码如下:
    //全选的Checkbox的Onclick事件
    function OnOrCancel(CheckAllId,CheckBoxId) {
        var flag = $("#" + CheckAllId + "").attr("checked"); //判断全选按钮的状态
        $("input:checkbox[name=" + CheckBoxId + "]").each(function () {
             $(this).attr("checked", flag);//选中或者取消选中 
        });
     }
    
    //每一个CheckBox的OnClick事件
     function eachClick(CheckboxId, CheckAllId) {
        //判断选中的个数和总个数是否相等
         if ($("[name='" + CheckboxId + "']:checked").length == $("[name='" + CheckboxId + "']").length) {
             $("#" + CheckAllId + "").attr("checked", "checked");
         }
         else $("#"+CheckAllId+"").removeAttr("checked");
    }
    
    OK,到这里,这小功能基本上就出来了。
       
posted on 2012-05-20 00:43  谢诗敏  阅读(671)  评论(0)    收藏  举报