如何在不创建新元素的情况下更改某些元素的类?

时间:2018-08-14 07:24:44

标签: php jquery html css calendar

我目前正在处理日历。 当用户在某个日期添加事件时,日历上的日期将通过更改其所属的类而获得另一种背景色。

这是我到目前为止尝试过的:

for ( $day = 1; $day <= $day_count; $day++, $str++) {
    $date = $ym . '-' . $day;
    for($i=0;$i<$len;$i++){
        if($date == $event_data[$i]['event_date'] && $date!=$today){
          $week .= "<td class='event'><a href = 'add_calendar.php?date=".$date."'>".$day."</a></td>";
        }
    }
    if ($today == $date ) {
        $date_replaced = str_replace(":","",date('Y:m:d'));
        $week .= "<td class='today'><a href = 'add_calendar.php?date=".$date."'>".$day."</a>";
    }
    else {
        $week .= "<td><a href = 'add_calendar.php?date=".$date."'>".$day."</a>";
    } 
     $week .= '</td>';  
    if ($str % 7 == 6 || $day == $day_count) {
        if ($day == $day_count) {
            $week .= str_repeat('<td></td>', 6 - ($str % 7));
        }
        $weeks[] = '<tr>' . $week . '</tr>';
        $week = '';
    }
}

但是,看起来就像图片所示: 添加事件后,就会显示一个新日期并弄乱日历。 The calendar

有人知道该如何解决吗?非常感谢!

日历的CSS为:

    .today {
        background: orange;
    }
    .event {
        background: #f6ffdb;
    }

2 个答案:

答案 0 :(得分:0)

您必须检查一天是否已经结束

尝试

for ( $day = 1; $day <= $day_count; $day++, $str++) {
$datesRendred = array();
$date = $ym . '-' . $day;
for($i=0;$i<$len;$i++){
    if($date == $event_data[$i]['event_date'] && $date!=$today && !in_array($date, $datesRendred)){
        $week .= "<td class='event'><a href = 'add_calendar.php?date=".$date."'>".$day."</a></td>";
        $datesRendred[]  = $date;
    }
}
if (!in_array($date, $datesRendred)) {
    if ($today == $date) {
        $date_replaced = str_replace(":","",date('Y:m:d'));
        $week .= "<td class='today'><a href = 'add_calendar.php?date=".$date."'>".$day."</a>";
        $datesRendred[]  = $date;
        $week .= '</td>';  
    }
    else {
        $week .= "<td><a href = 'add_calendar.php?date=".$date."'>".$day."</a>";
         $week .= '</td>';  
         $datesRendred[]  = $date;
    }

}

    if ($str % 7 == 6 || $day == $day_count) {
        if ($day == $day_count) {
            $week .= str_repeat('<td></td>', 6 - ($str % 7));
        }
        $weeks[] = '<tr>' . $week . '</tr>';
        $week = '';
    }
}

答案 1 :(得分:0)

如评论中所述,无需循环。这样的事情应该可以工作(但显然我自己很难测试,因此您可能仍需要进行一些调整)。

<?php
for ($day = 1; $day <= $day_count; $day++, $str++) {
    $date = $ym . '-' . $day;
    if ($date == $event_data[$i]['event_date'] && $date != $today) {
        $week .= "<td class='event'><a href = 'add_calendar.php?date=" . $date . "'>" . $day . "</a></td>";
    }
    elseif ($today == $date) {
        $date_replaced = str_replace(":", "", date('Y:m:d'));
        $week .= "<td class='today'><a href = 'add_calendar.php?date=" . $date . "'>" . $day . "</a>";
    }
    else {
        $week .= "<td><a href = 'add_calendar.php?date=" . $date . "'>" . $day . "</a>";
    }
    $week .= '</td>';
    if ($str % 7 == 6 || $day == $day_count) {
        if ($day == $day_count) {
            $week .= str_repeat('<td></td>', 6 - ($str % 7));
        }
        $weeks[] = '<tr>' . $week . '</tr>';
        $week = '';
    }
}