首页 > 解决方案 > 如何在不创建新元素的情况下更改某个元素的类?

问题描述

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

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

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 = '';
    }
}

然而,它变成了如图所示:当添加了一个事件时,就会显示一个新的日期并弄乱日历。 日历

有谁知道如何解决这个问题?非常感谢!

日历的css是:

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

标签: phpjqueryhtmlcsscalendar

解决方案


正如评论中所说,不需要循环。像这样的东西应该可以工作(但显然我自己很难测试它,所以你可能仍然需要一些调整)。

<?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 = '';
    }
}

推荐阅读