如何使用jQuery基于日期更改类

时间:2009-11-17 10:21:35

标签: javascript jquery jquery-plugins

我正在创建一个降临节日历,我需要一个jQuery / Javascript,它将根据日期更改div上的类。

我需要以前所有的日子都有一节课,现在是一节课,将来是一节课。

这是我的源代码:

<div id="container">
        <div class="box nov28">...</div>
        <div class="box dec1">...</div>
        <div class="box dec3">...</div>
        <div class="box dec5">...</div>
        <div class="box dec7">...</div>
        <div class="box dec12">...</div>
        <div class="box dec15">...</div>
        <div class="box dec17">...</div>
        <div class="box dec19">...</div>
        <div class="box dec21">...</div>
        <div class="box dec22">...</div>
        <div class="box dec23">...</div>
    </div>

这不是一个简单的开始12月1日,并持续24天。有12天的“优惠”不会完全遵循。这可以通过div类看出,即nov28 dec1 dec3

在上课日,我需要在前几天添加课程 - 课程之前和未来日期 - 课程未来。

所有帮助表示赞赏。

- 编辑 -

原始帖子修改为更具体。

2 个答案:

答案 0 :(得分:1)

基于上面的html代码

var today = new Date();
today = new Date(today.getFullYear(), today.getMonth(), today.getDate());

var month = "dec";
var day = today.getDate();
if (today.getMonth() == 10) {
    month="nov";
}

var selected = $(".container > div."+month+day);
if (selected.size() > 0) {
    selected.prevAll("div").addClass("previous");
    selected.addClass("present");
    selected.nextAll("div").addClass("future");
} else {
    // based on idea from Russ Cam but
    // only loop over all div's if today there is no matching div
    // as this is more costly (loop, regex, ...)
    $('.container > div').each(function() {
        var div = $(this);
        //extract month and date from class value 
        var divMonth = div.attr("class").replace(/.*(nov|dec)\d+.*/, "$1") == 'nov' ? 10 : 11;
        var divDay = div.attr("class").replace(/.*(?:nov|dec)(\d+).*/, "$1");
        var divDate = new Date(today.getFullYear(), divMonth, divDay);
        if (divDate > today)
            div.addClass('future');
        else
            if (divDate < today)
                div.addClass('previous');
            else
                div.addClass('present');
    });
}

检查http://jsbin.com/ewuro/edit以获取演示代码(稍微调整以显示它)。单击输出选项卡进行试用。

顺便说一下。 http://jsbin.com/ewuro ,虽然它应该与http://jsbin.com/ewuro/edit - &gt;相同输出选项卡,不起作用。由于jsbin背后的框架似乎吞噬了我的正则表达式中的$1,因此(Nov27,Dec4和Dec8的三个按钮将不起作用)。所以只需在输出选项卡中尝试。

答案 1 :(得分:1)

// get today's date
var today = new Date();
today = new Date(today.getFullYear(), today.getMonth(), today.getDate());

// go through the calendar windows representing each day
$('div.calendar-window').each(function() {
    var div = $(this);
    // check the date of the window.
    // let's imagine that the date is in a span with class date
    var divDate = Date.parse($('span.date', this).text());
    switch(divDate)
    {
        case divDate > today:
            div.addClass('future');
            break;               
        case divDate < today:
            div.addClass('past');
            break;
        default:
            div.addClass('today');   
            break;        
    }      
});

这只是一个例子,但希望你能得到这个想法。考虑到降临日历仅在12月运行,使用完整日期可能过度,只需使用getDate()并进行整数比较可能是更好的方法。此外,我们可以选择<span>元素并迭代它们,在每种情况下将类应用于父<div>。这意味着值得思考:)