You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Zabuto Calendar结合Ajax数据高亮日期时遇jQuery语法错误问题

解决Zabuto Calendar结合Ajax高亮日期时的jQuery语法错误问题

我之前也碰到过一模一样的问题,这个“Syntax error, unrecognized expression”基本上都是选择器格式不对或者Ajax返回的数据不符合要求导致的,结合你用的jQuery 3.2.1和Zabuto Calendar,咱们一步步来排查解决:

一、先检查Ajax返回的JSON格式是否标准

Zabuto Calendar对高亮日期的数据格式有明确要求,而且jQuery 3.x对JSON的解析要求更严格,这是最容易踩坑的点:

  • 首先打开浏览器控制台(F12),在Network标签里找到你的Ajax请求,查看Response内容,确保返回的是标准的JSON数组,比如:
    [
      {"date": "2024-05-20", "classname": "highlight"},
      {"date": "2024-05-25", "classname": "highlight"}
    ]
    
    注意必须用双引号,不能用单引号,数组里的每个对象要包含date(格式yyyy-mm-dd)和classname(自定义高亮类)字段。
  • 如果后端返回的是字符串而不是JSON,一定要在Ajax请求里加上dataType: 'json',或者手动用JSON.parse()解析,最好用try-catch包裹避免解析失败:
    success: function(response) {
      let highlightDates;
      try {
        highlightDates = JSON.parse(response);
      } catch(err) {
        console.error('JSON解析失败:', err);
        return;
      }
      // 后续处理逻辑
    }
    

二、确保日期选择器的语法绝对正确

如果你是手动操作DOM来高亮日期(而不是用Zabuto自带的data参数),那一定要注意Zabuto的日期单元格结构:每个日期单元格都带有data-date属性,值是yyyy-mm-dd格式,所以正确的选择器写法应该是:

// 假设date是从Ajax返回的"2024-05-20"
const selector = '.zabuto-calendar [data-date="' + date.trim() + '"]';
const $dateCell = $(selector);
  • 千万不能漏掉属性选择器里的双引号,不然如果日期里的-符号会破坏选择器结构,直接触发语法错误。
  • 最好给日期字符串加个trim(),避免后端返回的日期带前后空格,导致选择器匹配不到元素还报错。

三、推荐用Zabuto自带的方式加载高亮日期

其实Zabuto本身就支持直接传入日期数据初始化日历,这种方式比手动操作DOM靠谱多了,完全避免选择器错误的问题,示例代码如下:

$(document).ready(function() {
  $.ajax({
    url: '你的接口地址',
    method: 'GET',
    dataType: 'json',
    success: function(highlightDates) {
      // 把返回的数据转换成Zabuto需要的格式(如果后端已经符合要求可以直接用)
      const calendarEvents = highlightDates.map(item => ({
        date: item.date,
        classname: 'highlight', // 自定义高亮样式类
        badge: true // 可选,给日期加个小徽章
      }));

      // 初始化日历,直接传入高亮数据
      $('#calendar').zabuto_calendar({
        data: calendarEvents,
        weekstartson: 0, // 设置周日为一周的开始,可选
        action: function() {
          return handleDateClick(this.id, false);
        }
      });
    },
    error: function(xhr, status, err) {
      console.error('加载高亮日期失败:', err);
    }
  });
});

// 日期点击事件的自定义逻辑
function handleDateClick(id, fromModal) {
  const clickedDate = $("#" + id).data("date");
  alert(`你点击了日期:${clickedDate}`);
}

四、最后加个自定义高亮样式

在CSS里写个高亮类,让效果更明显:

.zabuto-calendar .highlight {
  background-color: #ffd54f;
  color: #212121;
  border-radius: 50%;
}

调试小技巧

如果还是报错,在控制台打印关键信息排查:

  • 打印Ajax返回的数据:console.log('返回数据:', data),确认结构和格式是否正确。
  • 打印构造的选择器:console.log('选择器:', selector),看看有没有引号不匹配或者多余字符。

内容的提问来源于stack exchange,提问作者theEUG

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:06:31