js使用表格生成一个日历,点击按钮上查看上个月,点击按钮下,查看下个月,月份,年份

简介: js使用表格生成一个日历,点击按钮上查看上个月,点击按钮下,查看下个月,月份,年份

要使用JavaScript生成一个日历表格,并添加按钮来查看上一个月和下一个月,同时显示月份、年份以及每天对应的周数,并且只渲染有日期的行,可以按照以下步骤进行操作:


1.创建HTML结构:在HTML文件中创建一个包含表格、按钮和日期信息的容器元素。例如:

<div id="calendar">
  <div id="header">
    <button id="prevBtn">上个月</button>
    <span id="monthYear"></span>
    <button id="nextBtn">下个月</button>
  </div>
  <table id="calendarTable">
    <!-- 表格内容将通过JavaScript动态生成 -->
  </table>
</div>


2.编写JavaScript代码:在JavaScript文件中编写代码来生成日历表格、处理按钮点击事件以及计算每天对应的周数。首先,我们需要获取容器元素和按钮元素的引用,然后为按钮添加点击事件监听器。

 

// 获取容器元素和按钮元素的引用
const calendarContainer = document.getElementById('calendar');
const prevButton = document.getElementById('prevBtn');
const nextButton = document.getElementById('nextBtn');
const monthYear = document.getElementById('monthYear');
// 设置按钮的点击事件监听器
prevButton.addEventListener('click', showPrevMonth);
nextButton.addEventListener('click', showNextMonth);
// 定义当前日期变量
let currentDate = new Date();
// 显示当前月份的日历
showCalendar(currentDate);
function getWeekNumber(year, month, day) {
  const date = new Date(year, month, day);
  date.setHours(0, 0, 0);
  date.setDate(date.getDate() + 4 - (date.getDay() || 7));
  const yearStart = new Date(date.getFullYear(), 0, 1);
  const weekNum = Math.ceil((((date - yearStart) / 86400000) + 1) / 7);
  return weekNum;
}
// 显示上一个月的日历
function showPrevMonth() {
  currentDate.setMonth(currentDate.getMonth() - 1);
  showCalendar(currentDate);
}
// 显示下一个月的日历
function showNextMonth() {
  currentDate.setMonth(currentDate.getMonth() + 1);
  showCalendar(currentDate);
}
// 生成日历表格
function showCalendar(date) {
  // 获取年份和月份
  const year = date.getFullYear();
  const month = date.getMonth();
  // 更新月份和年份显示
  monthYear.textContent = `${year}年${month + 1}月`;
  // 清空表格内容
  const calendarTable = document.getElementById('calendarTable');
  calendarTable.innerHTML = '';
  // 创建表头
  const headerRow = calendarTable.insertRow();
  const weekdays = ['日', '一', '二', '三', '四', '五', '六'];
  for (let i = 0; i < 7; i++) {
    const cell = headerRow.insertCell();
    cell.textContent = weekdays[i];
  }
  // 获取当月的第一天和最后一天
  const firstDay = new Date(year, month, 1);
  const lastDay = new Date(year, month + 1, 0);
  // 计算日期范围
  const start = firstDay.getDay();
  const end = lastDay.getDate();
  // 创建日期单元格
  let dateCount = 1;
  let weekCount = 1;
  let hasRenderedRows = false;
  for (let row = 0; row < 6; row++) {
    const calendarRow = calendarTable.insertRow();
    for (let col = 0; col < 7; col++) {
      const cell = calendarRow.insertCell();
      if ((row === 0 && col < start) || dateCount > end) {
        // 上个月或下个月的日期
        cell.classList.add('non-current-month');
      } else {
        // 当月的日期
        cell.textContent = dateCount++;
        const currentWeek = getWeekNumber(year, month, cell.textContent);
        cell.dataset.week = currentWeek;
        if (!hasRenderedRows) {
          hasRenderedRows = true;
        }
      }
    }
  }
  // 如果没有渲染任何日期行,则删除最后一行空白行
  if (!hasRenderedRows) {
   ```javascript
    calendarTable.deleteRow(6);
  }
}


3.样式美化:根据需要,可以使用CSS来为表格和按钮添加样式。例如:

#calendar {
  text-align: center;
}
#header {
  margin-bottom: 10px;
}
#prevBtn,
#nextBtn {
  padding: 5px 10px;
  background-color: #ccc;
  border: none;
  cursor: pointer;
}
#monthYear {
  font-weight: bold;
  margin: 0 10px;
}
#calendarTable {
  border-collapse: collapse;
  margin: 0 auto;
}
#calendarTable td {
  padding: 5px;
  text-align: center;
}
.non-current-month {
  color: #ccc;
}


相关文章
|
3月前
|
Web App开发 JavaScript 前端开发
添加浮动按钮点击滚动到网页底部的纯JavaScript演示代码 IE9、11,Maxthon 1.6.7,Firefox30、31,360极速浏览器7.5.3.308下测试正常
添加浮动按钮点击滚动到网页底部的纯JavaScript演示代码 IE9、11,Maxthon 1.6.7,Firefox30、31,360极速浏览器7.5.3.308下测试正常
|
1月前
|
数据采集 存储 监控
实现自动化数据抓取:使用Node.js操控鼠标点击与位置坐标
本文介绍了如何使用Node.js和Puppeteer实现自动化数据抓取,特别是针对新闻网站“澎湃新闻”。通过设置代理IP、User-Agent和Cookie,提高爬虫的效率和隐蔽性,避免被网站封锁。代码示例展示了如何模拟鼠标点击、键盘输入等操作,抓取并整理新闻数据,适用于需要规避IP限制和突破频率限制的场景。
99 10
|
2月前
|
JavaScript 前端开发
|
3月前
|
JavaScript 前端开发
JS判断点击是单击还是双击
如何使用JavaScript判断用户点击是单击还是双击。
47 0
|
4月前
|
前端开发 JavaScript 开发者
前端JS按钮点击事件、跳出弹窗、遮罩的实战示例
本文提供了一个前端JS按钮点击事件、弹出式窗口和遮罩层的实战示例,包括HTML、CSS和JavaScript的具体实现代码,以及功能解析,演示了如何实现按钮点击后触发弹窗显示和遮罩层,并在2秒后自动关闭或点击遮罩层关闭弹窗的效果。
前端JS按钮点击事件、跳出弹窗、遮罩的实战示例
|
4月前
|
JavaScript 前端开发
使用js生成表格标题、表格内容并且每行附带删除按钮然后插入到页面中
使用js生成表格标题、表格内容并且每行附带删除按钮然后插入到页面中
43 2
|
4月前
|
JavaScript 前端开发 Java
JavaScript内存泄露大揭秘!你的应用为何频频“爆内存”?点击解锁救星秘籍!
【8月更文挑战第23天】在Web前端开发中,JavaScript是构建动态网页的关键技术。然而,随着应用复杂度增加,内存管理变得至关重要。本文探讨了JavaScript中常见的内存泄露原因,包括意外的全局变量、不当使用的闭包、未清除的定时器、未清理的DOM元素引用及第三方库引发的内存泄露。通过了解这些问题并采取相应措施,开发者可以有效避免内存泄露,提高应用性能。
72 1
|
4月前
|
JavaScript Java
点击按钮,向下添加目录。Java script+jQuery写法
点击按钮,向下添加目录。Java script+jQuery写法
29 1
|
4月前
|
JavaScript Java
分别使用js与jquery写 单击按钮时出现内容 点击删除按钮不会再向下出现
分别使用js与jquery写 单击按钮时出现内容 点击删除按钮不会再向下出现
23 1
|
4月前
|
JavaScript 前端开发
Next js:点击登录显示登录表单,点击注册显示注册表单的功能
本文提供了一个Next.js中使用React状态管理实现点击按钮切换显示登录和注册表单的功能示例,包括创建`authform.tsx`组件和在页面组件中引入使用的方法。