在 fullCalendar v3 中,带有 HTML 实体的内容在浏览器中正确呈现。使用 fullCalendar v6,它按原样显示:
https://codepen.io/brianhogg/pen/LYqBaWz?editors=001
虽然我想出了一种巧妙的方法来删除 HTML 实体,但看起来放置新格式标题的唯一方法是从头开始重建所有输出。例如使用此SO线程中的解决方案:
eventContent: function (arg) {
const txt = document.createElement("textarea");
const titleElement = document.createElement('div');
const timeElement = document.createElement('div');
timeElement.className = 'fc-event-time';
timeElement.innerHTML = arg.timeText;
titleElement.className = 'fc-event-title';
txt.innerHTML = arg.event.title;
titleElement.innerHTML = txt.value;
if (arg.event.start.getDate() !== arg.event.end.getDate()) {
const frameElement = document.createElement('div');
frameElement.className = 'fc-event-main-frame';
const titleContainer = document.createElement('div');
titleContainer.className = 'fc-event-title-container';
titleElement.className += ' fc-sticky';
titleContainer.appendChild(titleElement);
frameElement.appendChild(timeElement);
frameElement.appendChild(titleContainer);
return { domNodes: [ frameElement ] };
}
return { domNodes: [ timeElement, titleElement ] };
},
这感觉非常脆弱,我还没有在所有 fullCalendar v6 视图中测试它。
有没有办法获取默认的 eventContent 并过滤它(即替换
.fc-event-title
div 中的值)?或者另一种更简洁的方法来复制 fullCalendar v3 中的功能以输出渲染实体的内容?
根据 event render hooks 文档,
eventDidMount
回调提供 el
,它是正在渲染的 HTML 元素的副本。所以这给了你我认为你正在寻找的起点。
这是一个非常简单的使用示例:
eventDidMount: function(arg) {
console.log(arg.el);
arg.el.innerHTML += "hello";
}