javascriptを学習中です。ネットにあるサイトを参考にシンプルなカレンダーを作ってみたのですが、カレンダーの描画に前月末日も含めて表示されるようになっています。
そのため、今月の日付とわかるように前月、来月の日付はグレーにして、今月の日付は全て黒色で表示させたいと思ってます。
調べたところCSSで色変更ができるようですが、javascriptを使って上記のように色を書けないのでしょうか。
よろしければ学習中ということもありjavascriptでの書き方をご教授頂ければと思っています(CSSでも構わないです)
ソースコードは以下です。
<html> <head> <title>カレンダー</title> <meta charset="utf-8"> <script type="text/javascript"> window.onload = function() { setCalendar(); }; function setCalendar(YYYY, MM) { var YYYY, MM; // 年と月に値がなければYYYYとMM今月のものを表示させるため値を渡すようにする if(!YYYY && !MM) { var YYYY = new Date().getFullYear(); var MM = new Date().getMonth(); MM = MM -(-1); } var LastMonthdate = new Date(YYYY,MM-1,0); //前月末 var ThisMonthdate = new Date(YYYY,MM,0); //当月末 LastMonthLastDay = LastMonthdate.getDate(); //前月末日 LastMonthLastWeek = LastMonthdate.getDay(); //前月末曜日 ThisMonthLastDay = ThisMonthdate.getDate(); //当月末日 ThisMonthLastWeek = ThisMonthdate.getDay(); //当月末曜日 var days = [];if(LastMonthLastWeek != 6){
// 前月最終曜日から月末曜日までの日付
for(var i=LastMonthLastWeek; i>=0; i--){
days[LastMonthLastWeek-i] = (LastMonthLastDay - i);
}
// 当月日付
for(var i=1; i<=ThisMonthLastDay; i++){
days[LastMonthLastWeek+i] = i;
}
// 当月末が35番目までに終了
if((LastMonthLastWeek + ThisMonthLastDay) <= 34){
// 翌月日付
for(var i=1; i<=35-LastMonthLastWeek-ThisMonthLastDay; i++){
days[LastMonthLastWeek+ThisMonthLastDay+i] = i;
}
}
// 前月末が土曜日
}else if (LastMonthLastWeek == 6) {
// 当月日付
for(var i=1; i<=ThisMonthLastDay; i++){
days[i-1] = i;
}
// 翌月日付
for(var i=0; i<35-ThisMonthLastDay; i++){
days[ThisMonthLastDay+i] = i + 1;
}
}
var out = "<table>";
out += "<caption>";
out += "<a href='#' onclick='setCalendar();return false;'>今月</a>";
out += "<a href='#' YYYY='"+YYYY+"' MM='"+MM+"' onclick='backMM(this);return false;'><<</a>";
out += "<a href='#' YYYY='"+YYYY+"' MM='"+MM+"' onclick='nextMM(this);return false;'>>></a>";
out += YYYY+'年'+MM+'月';
out += "</caption>";
var week = ["日", "月", "火", "水", "木", "金", "土"];
out += "<tr>";
for(var i in week){
out += "<td>"+week[i]+"</td>";
}
var row = days.length/7;
for(var i=1; i<=row; i++){
out += "<tr>";
for(var j=7i-6; j<=7i; j++){
out += "<td class='tdlink' row='"+i+"' YYYY='"+YYYY+"' MM='"+MM+"' DD='"+days[j-1]+"' onclick='show(this);return false;'>"+days[j-1]+"</td>";
}
out += "</tr>";
}
out += "</table>";
document.getElementById("result").innerHTML = out;
}
function backMM(e){
var YYYY = e.getAttribute('YYYY');
var MM = e.getAttribute('MM');
if(MM != 1){
MM = MM-1;
}else if (MM == 1) {
MM = 12;
YYYY = YYYY -1;
}
setCalendar(YYYY,MM);
}
function nextMM(e){
var YYYY = e.getAttribute('YYYY');
var MM = e.getAttribute('MM');
if(MM != 12){
MM = parseInt(MM) + 1;
}else if (MM == 12) {
MM =1;
YYYY = parseInt(YYYY) + 1;
}
setCalendar(YYYY,MM);
}
function show(e){
var row = e.getAttribute('row');
var YYYY = e.getAttribute('YYYY');
var MM = e.getAttribute('MM');
var DD = e.getAttribute('DD');
if (row == 1 && DD > 7) {
if (MM != 1) {
MM = MM -1;
} else if (MM == 1) {
YYYY = YYYY - 1;
MM = 12;
}
}
if ((row == 5 || row == 6) && DD < 7) {
if (MM != 12) {
MM = parseInt(MM) + 1;
} else if (MM == 12) {
YYYY = parseInt(YYYY) + 1;
MM = 1;
}
}
alert(YYYY+'/'+MM+'/'+DD);
}
</script>
回答1件
あなたの回答
tips
プレビュー