Layui日期组件laydate如何实现根据后端接口动态标记红点日期

轻辰君_9492

轻辰君_9492

2026-06-10

669人浏览

原创

laydate通过ready/change回调结合lay-ymd属性标记待红点日期:先用AJAX获取ISO格式日期数组,转为YYYYMMDD后,在回调中遍历匹配td并添加laydate-day-hint类实现红点。

laydate 怎么加载后端返回的待标记日期数组

laydate 本身不提供「红点标记」能力,但支持通过 ready 和 change 钩子 + 自定义 css 渲染节点。核心是:先用 ajax 拿到带红点的日期列表(如 ["2024-05-10", "2024-05-15"]),再在日历渲染完成后,遍历所有日期单元格,比对并添加红点 dom 元素。

注意:必须等 laydate 实例完全渲染完才操作 DOM,否则找不到目标节点。推荐在 ready 回调中执行标记逻辑,而非 change(后者每次切月都会触发,易重复插入)。

  • 后端接口建议返回 ISO 格式字符串数组(["2024-05-10"]),避免时区/格式歧义
  • 前端需缓存该数组(如挂到实例对象上),供后续切月时复用,避免反复请求
  • 日期比对前统一转为 YYYY-MM-DD 格式(用 laydate.now(0, 'YYYY-MM-DD') 或 new Date().toISOString().slice(0,10))

如何给指定日期单元格插入红点 DOM

laydate 渲染的日历表格中,每个日期 td 元素带有 lay-ymd 属性,值为 YYYYMMDD(如 20240510)。这是最可靠的选择器依据,比文本匹配或位置索引更稳定。

红点一般用绝对定位小圆点实现,CSS 可复用:

.laydate-day-hint {
  position: relative;
}
.laydate-day-hint::after {
  content: '';
  position: absolute;
  width: 6px;
  height: 6px;
  background: #ff5722;
  border-radius: 50%;
  top: 4px;
  right: 4px;
}

JS 插入逻辑示例:

const markedDates = ["2024-05-10", "2024-05-15"];
const ymdList = markedDates.map(d => d.replace(/-/g, ''));

// 在 ready 回调里执行
ready: function(elem, date, endDate) {
  ymdList.forEach(ymd => {
    const td = elem.next('.layui-laydate-main').find(`[lay-ymd="${ymd}"]`);
    if (td.length && !td.hasClass('laydate-day-hint')) {
      td.addClass('laydate-day-hint');
    }
  });
}

切换年月时红点消失?怎么保持标记同步

laydate 切换年月会销毁并重建整个日历 DOM,所以之前加的 class 或 ::after 会丢失。不能只靠 ready 一次执行 —— 必须每次渲染都重打标记。

深蓝色网站后台管理系统layui框架模板-AdminPro
深蓝色网站后台管理系统layui框架模板-AdminPro

一款深蓝色网站后台管理系统layui框架模板

下载
  • 把标记逻辑封装成独立函数(如 markDays(elem, markedDates))
  • 在 ready 和 change 两个回调里都调用它(change 参数含当前年月,可用来过滤仅渲染当月数据,提升性能)
  • 如果后端支持按年月分页查询,可在 change 里动态拉取当月标记数据,避免一次性加载过大数组

注意:change 触发时,DOM 已更新,但尚未完成动画,建议加 setTimeout(..., 0) 确保节点就绪。

为什么用 lay-ymd 而不用日期文本匹配

直接读 td 文本内容(如 $(td).text() === "10")极易出错:同一天在不同月份可能重复出现;中文版可能带「今日」标红;移动端适配时文本可能被截断或换行。

lay-ymd 是 laydate 内部生成的唯一、无歧义标识,且稳定存在于所有版本(v2.8+ 均支持)。只要不手动删改该属性,就是最安全的锚点。

额外提醒:若后端返回的是时间戳或毫秒数,务必在前端统一转成 YYYYMMDD 字符串再比对,别用 new Date().getDate() 去提取日份——跨月时会漏掉 1 号以外的日期。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

layui

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2403

5

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

6250

13

后端的主要工作内容介绍
后端的主要工作内容介绍

后端是应用程序的服务端部分,负责核心任务,如数据库交互、业务逻辑处理和响应客户端请求。想了解更多后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

5626

10

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

2023.10.19

3108

3

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

2025.10.17

4689

12

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2025.12.29

3749

9

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

2026.01.19

426

15

PixTV官网入口地址合集
PixTV官网入口地址合集

本专题汇总了 PixTV AI 一站式视频创作平台的官方入口与使用教程。无需下载软件,浏览器直接访问即可使用。平台将剧本、图像、视频、声音与剪辑整合在“无限画布”中,接入 GPT Image 2.5、Seedance 2.5 等头部模型。本专题整理了从新建画布、角色锚定、分镜拆分到视频生成与导出的完整操作指南,助你快速上手 AI 短剧与漫剧创作。

2026.10.10

40

15

Kratos框架HTTP与gRPC服务开发教程
Kratos框架HTTP与gRPC服务开发教程

本专题围绕Kratos框架双协议服务开发,涵盖HTTP路由与处理器编写、参数获取、gRPC服务实现与客户端调用、metadata上下文传递、encoding编解码注册、统一响应封装、超时控制与流式响应实现方法。

2026.10.10

20

15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
ThinkPHP配置开发与CMS后台实战
ThinkPHP配置开发与CMS后台实战

共87课时 | 12.8万人学习

第二十三期_综合实战
第二十三期_综合实战

共89课时 | 11万人学习

Layui 快速入门精讲
Layui 快速入门精讲

共5课时 | 1.6万人学习