2015-04-07 67 views
0

我正在製作一個純粹來自Javascript的日曆,但是當顯示上一個和下一個月時,當前內容仍然存在。它應該取代div的內容。另外,當前日期應該是唯一一個顯示紅色字體的日期。如何清除onclick div內容?

<html> 
<head><script> 

     var now = new Date(); 
     var year = now.getFullYear(); 
     var month = now.getMonth(); 
     var monthName = getMonthName(month); 
     var time = now.toLocaleTimeString(); 
     var date = now.getDate(); 
     now = null; 
     var calElem = document.getElementById("cal"); 

     function febDays(year) { 
      if (year % 4 == 0) { 
       return 29; 
      } else { 
       return 28; 
      } 
     } 

     function getDays(month, year) { 
      var days = new Array(12); 
      days[0] = 31; 
      days[1] = febDays(year); 
      days[2] = 31; 
      days[3] = 30; 
      days[4] = 31; 
      days[5] = 30; 
      days[6] = 31; 
      days[7] = 31; 
      days[8] = 30; 
      days[9] = 31; 
      days[10] = 30; 
      days[11] = 31; 
      return days[month]; 
     } 

     function getMonthName(month) { 
      var mn = new Array(12); 
      mn[0] = "January"; 
      mn[1] = "February"; 
      mn[2] = "March"; 
      mn[3] = "April"; 
      mn[4] = "May"; 
      mn[5] = "June"; 
      mn[6] = "July"; 
      mn[7] = "August"; 
      mn[8] = "September"; 
      mn[9] = "October"; 
      mn[10] = "November"; 
      mn[11] = "December"; 
      return mn[month]; 
     } 

     function monthName(month) { 
      var mn = new Array(12); 
      mn[0] = "Jan"; 
      mn[1] = "Feb"; 
      mn[2] = "Mar"; 
      mn[3] = "Apr"; 
      mn[4] = "May"; 
      mn[5] = "Jun"; 
      mn[6] = "Jul"; 
      mn[7] = "August"; 
      mn[8] = "September"; 
      mn[9] = "October"; 
      mn[10] = "November"; 
      mn[11] = "December"; 
      return mn[month]; 
     } 

     function setCal() { 
      var firstDay = new Date(year, month, 1); 
      var startDay = firstDay.getDay(); 
      firstDay = null; 
      var days = getDays(month, year); 
      drawCal(startDay + 1, days, date, monthName, year, month); 
     } 

     function previousMonth() { 
     document.getElementById('cal').innerHTML = ""; 
      month--; 
      var monthName = getMonthName(month); 
      var firstDay = new Date(year, month, 1); 
      var startDay = firstDay.getDay(); 
      firstDay = null; 
      var days = getDays(month, year); 
      drawCal(startDay + 1, days, date, monthName, year, month); 
      if (monthName === "January"){ 
       year--; 
       month = 11; 
       monthName = getMonthName(month); 
       firstDay = new Date(year, month, 1); 
       startDay = firstDay.getDay(); 
       firstDay = null; 
       days = getDays(month, year); 
      drawCal(startDay + 1, days, date, monthName, year, month); 
      } 
     } 

     function nextMonth() { 
     document.getElementById('cal').innerHTML = ""; 
      month++; 
      var monthName = getMonthName(month); 
      var firstDay = new Date(year, month, 1); 
      var startDay = firstDay.getDay(); 
      firstDay = null; 
      var days = getDays(month, year); 
      drawCal(startDay + 1, days, date, monthName, year, month); 
      if (monthName === "December"){ 
       year++; 
       month = 0; 
       monthName = getMonthName(month); 
       firstDay = new Date(year, month, 1); 
       startDay = firstDay.getDay(); 
       firstDay = null; 
       days = getDays(month, year); 
      drawCal(startDay + 1, days, date, monthName, year, month); 
      } 
     } 

     function drawCal(startDay, lastDate, date, monthName, year, month) { 
      var headerHeight = 50; 
      var border = 2; 
      var cellspacing = 4; 
      var headerSize = "+3"; 
      var colWidth = 60; 
      var dayCellHeight = 25; 
      var cellHeight = 40; 
      var todayColor = "red"; 
      var text = ""; 
      text += '<div id="cal">'; 
      text += '<TABLE BORDER=' + border + ' CELLSPACING=' + cellspacing + '>'; 
      text += '<TH COLSPAN=7 HEIGHT=' + headerHeight + '>'; 
      text += '<FONT SIZE=' + headerSize + '>'; 
      text += monthName + ' ' + year; 
      text += '</FONT>'; 
      text += '</TH>'; 

      var openCol = '<TD WIDTH=' + colWidth + ' HEIGHT=' + dayCellHeight + '>'; 
      var closeCol = '</TD>'; 

      var weekDay = new Array(7); 
      weekDay[0] = "Sunday"; 
      weekDay[1] = "Monday"; 
      weekDay[2] = "Tuesday"; 
      weekDay[3] = "Wednesday"; 
      weekDay[4] = "Thursday"; 
      weekDay[5] = "Friday"; 
      weekDay[6] = "Saturday"; 

      text += '<TR ALIGN="center" VALIGN="center">'; 
      for (var dayNum = 0; dayNum < 7; ++dayNum) { 
       text += openCol + weekDay[dayNum] + closeCol; 
      } 
      text += '</TR>'; 


      var digit = 1; 
      var curCell = 1; 

      for (var row = 1; row <= Math.ceil((lastDate + startDay - 1)/7); ++row) { 
       text += '<TR ALIGN="right" VALIGN="top">'; 
       for (var col = 1; col <= 7; ++col) { 
        if (digit > lastDate) 
         break; 
        if (curCell < startDay) { 
         text += '<TD></TD>'; 
         curCell++; 
        } else { 
         if (digit == date) { 
          text += '<TD HEIGHT=' + cellHeight + '>'; 
          text += '<FONT COLOR="' + todayColor + '">'; 
          text += digit + " "; 
          text += '</FONT>'; 
          text += '</TD>'; 
         } else 
          text += '<TD HEIGHT=' + cellHeight + '>' + digit + '</TD>'; 
         digit++; 
        } 
       } 
       text += '</TR>'; 
      } 


      text += '</TABLE>'; 
      text += '</CENTER>'; 
      text += '</div>'; 
      text += '<button onclick="previousMonth()"><</button>'; 
      text += '<button onclick="nextMonth()">></button>'; 

      document.write(text); 

     } 

    </script></head> 
<body onload="setCal()"> 

</body> 
</html> 

回答

0

我認爲這將是更好,如果你可以使用一個容器元素,並將其內容,而不是使用document.write()的

<html> 
<head><script> 

     var now = new Date(); 
     var year = now.getFullYear(); 
     var month = now.getMonth(); 
     var monthName = getMonthName(month); 
     var time = now.toLocaleTimeString(); 
     var date = now.getDate(); 
     now = null; 
     var calElem = document.getElementById("cal"); 

     function febDays(year) { 
      if (year % 4 == 0) { 
       return 29; 
      } else { 
       return 28; 
      } 
     } 

     function getDays(month, year) { 
      var days = new Array(12); 
      days[0] = 31; 
      days[1] = febDays(year); 
      days[2] = 31; 
      days[3] = 30; 
      days[4] = 31; 
      days[5] = 30; 
      days[6] = 31; 
      days[7] = 31; 
      days[8] = 30; 
      days[9] = 31; 
      days[10] = 30; 
      days[11] = 31; 
      return days[month]; 
     } 

     function getMonthName(month) { 
      var mn = new Array(12); 
      mn[0] = "January"; 
      mn[1] = "February"; 
      mn[2] = "March"; 
      mn[3] = "April"; 
      mn[4] = "May"; 
      mn[5] = "June"; 
      mn[6] = "July"; 
      mn[7] = "August"; 
      mn[8] = "September"; 
      mn[9] = "October"; 
      mn[10] = "November"; 
      mn[11] = "December"; 
      return mn[month]; 
     } 

     function monthName(month) { 
      var mn = new Array(12); 
      mn[0] = "Jan"; 
      mn[1] = "Feb"; 
      mn[2] = "Mar"; 
      mn[3] = "Apr"; 
      mn[4] = "May"; 
      mn[5] = "Jun"; 
      mn[6] = "Jul"; 
      mn[7] = "August"; 
      mn[8] = "September"; 
      mn[9] = "October"; 
      mn[10] = "November"; 
      mn[11] = "December"; 
      return mn[month]; 
     } 

     function setCal() { 
      var firstDay = new Date(year, month, 1); 
      var startDay = firstDay.getDay(); 
      firstDay = null; 
      var days = getDays(month, year); 
      drawCal(startDay + 1, days, date, monthName, year, month); 
     } 

     function previousMonth() { 
     document.getElementById('cal').innerHTML = ""; 
      month--; 
      var monthName = getMonthName(month); 
      var firstDay = new Date(year, month, 1); 
      var startDay = firstDay.getDay(); 
      firstDay = null; 
      var days = getDays(month, year); 
      drawCal(startDay + 1, days, date, monthName, year, month); 
      if (monthName === "January"){ 
       year--; 
       month = 11; 
       monthName = getMonthName(month); 
       firstDay = new Date(year, month, 1); 
       startDay = firstDay.getDay(); 
       firstDay = null; 
       days = getDays(month, year); 
      drawCal(startDay + 1, days, date, monthName, year, month); 
      } 
     } 

     function nextMonth() { 
     document.getElementById('cal').innerHTML = ""; 
      month++; 
      var monthName = getMonthName(month); 
      var firstDay = new Date(year, month, 1); 
      var startDay = firstDay.getDay(); 
      firstDay = null; 
      var days = getDays(month, year); 
      drawCal(startDay + 1, days, date, monthName, year, month); 
      if (monthName === "December"){ 
       year++; 
       month = 0; 
       monthName = getMonthName(month); 
       firstDay = new Date(year, month, 1); 
       startDay = firstDay.getDay(); 
       firstDay = null; 
       days = getDays(month, year); 
      drawCal(startDay + 1, days, date, monthName, year, month); 
      } 
     } 

     function drawCal(startDay, lastDate, date, monthName, year, month) { 
      var headerHeight = 50; 
      var border = 2; 
      var cellspacing = 4; 
      var headerSize = "+3"; 
      var colWidth = 60; 
      var dayCellHeight = 25; 
      var cellHeight = 40; 
      var todayColor = "red"; 
      var text = ""; 
      text += '<div id="cal">'; 
      text += '<TABLE BORDER=' + border + ' CELLSPACING=' + cellspacing + '>'; 
      text += '<TH COLSPAN=7 HEIGHT=' + headerHeight + '>'; 
      text += '<FONT SIZE=' + headerSize + '>'; 
      text += monthName + ' ' + year; 
      text += '</FONT>'; 
      text += '</TH>'; 

      var openCol = '<TD WIDTH=' + colWidth + ' HEIGHT=' + dayCellHeight + '>'; 
      var closeCol = '</TD>'; 

      var weekDay = new Array(7); 
      weekDay[0] = "Sunday"; 
      weekDay[1] = "Monday"; 
      weekDay[2] = "Tuesday"; 
      weekDay[3] = "Wednesday"; 
      weekDay[4] = "Thursday"; 
      weekDay[5] = "Friday"; 
      weekDay[6] = "Saturday"; 

      text += '<TR ALIGN="center" VALIGN="center">'; 
      for (var dayNum = 0; dayNum < 7; ++dayNum) { 
       text += openCol + weekDay[dayNum] + closeCol; 
      } 
      text += '</TR>'; 


      var digit = 1; 
      var curCell = 1; 

      for (var row = 1; row <= Math.ceil((lastDate + startDay - 1)/7); ++row) { 
       text += '<TR ALIGN="right" VALIGN="top">'; 
       for (var col = 1; col <= 7; ++col) { 
        if (digit > lastDate) 
         break; 
        if (curCell < startDay) { 
         text += '<TD></TD>'; 
         curCell++; 
        } else { 
         if (digit == date) { 
          text += '<TD HEIGHT=' + cellHeight + '>'; 
          text += '<FONT COLOR="' + todayColor + '">'; 
          text += digit + " "; 
          text += '</FONT>'; 
          text += '</TD>'; 
         } else 
          text += '<TD HEIGHT=' + cellHeight + '>' + digit + '</TD>'; 
         digit++; 
        } 
       } 
       text += '</TR>'; 
      } 


      text += '</TABLE>'; 
      text += '</CENTER>'; 
      text += '</div>'; 
      text += '<button onclick="previousMonth()"><</button>'; 
      text += '<button onclick="nextMonth()">></button>'; 

      document.getElementById('calc').innerHTML=text; 

     } 

    </script></head> 
<body onload="setCal()"> 
    <div id="calc"></div> 
</body> 
</html> 
+0

是否可以添加事件到某個日期? –

0

如果要清除任何HTML元素你只 切勿使用document.write()它清除整個頁面。

這是document.write()無論如何,它總是停留在那裏。儘量不要使用document.write()

改爲使用createElement('div')。它更乾淨,可以跟蹤元素,並且它們是靜態的,除非您希望它們改變。一切都在你的控制之下。

document.getElementById('Clear_This_Div_id').innerHTML = ''; 

這通常會清除元素

0

在不改變許多代碼的其他部分的情況下,只需將

document.write(text); 

更改爲

document.getElementsByTagName('body')[0].innerHTML = text; 

這將清除掉以前的內容把新的人之前,因爲你是在每次body投入。