我正在使用FullCalendar加载Google日历。我想将日历中某个类的所有a
标记转换为span
s。如果我在页面加载后在Scratchpad中执行它,我的代码会很好,但如果我把它放在JavaScript文件中的日历代码后面,它什么都不会做(所有的a
s仍然是a
s)。以下是我的代码:
$(document).ready(function() {
$('#calendar').fullCalendar({
eventSources: [
'MY CALENDAR URL',
{
url: 'https://www.google.com/calendar/feeds/en.usa%23holiday%40group.v.calendar.google.com/public/basic',
className: 'holiday'
}
],
header: {
left: 'title',
center: '',
right: 'prev,next'
}
});
var aclass = $('a.holiday').attr('class');
var astyle = $('a.holiday').attr('style');
var atext = $('a.holiday').html();
$('a.holiday').replaceWith('<span style="'+ astyle +'" class="'+ aclass +'">'+ atext +'</span>');
});
JS错误控制台中只显示两个错误:
[17:34:08.182]不赞成使用getUserData()或setUserData(。请改用WeakMap或element.dataset。
[17:34:08.663]SyntaxError:使用//@指示源映射URL不赞成使用pragmas。使用//#代替
他们似乎都与我的问题无关。一个位于jQuery中,另一个位于requestNotificationer.js.
FullCalendar提供了一些不错的挂钩,您可以使用这些挂钩来按照自己的意愿设置事件的样式。
完成这项工作的一种方法是简单地将当前代码移动到eventAfterAllRender
中,如下所示:
$('#calendar').fullCalendar({
[...]
eventAfterAllRender: function() {
var aclass = $('a.holiday').attr('class');
var astyle = $('a.holiday').attr('style');
var atext = $('a.holiday').html();
$('a.holiday').replaceWith('<span style="'+ astyle +'" class="'+ aclass +'">'+ atext +'</span>');
}
[...]
});
好吧,弄清楚了:日历必须强制加载,所以将代码与不同的事件分离很好:
$(document).ready(function() {
$('#calendar').fullCalendar({
eventSources: [
'https://www.google.com/calendar/feeds/r9iglfiamf6s7vr61lspgaa35g%40group.calendar.google.com/public/basic',
{
url: 'https://www.google.com/calendar/feeds/en.usa%23holiday%40group.v.calendar.google.com/public/basic',
className: 'holiday'
}
],
header: {
left: 'title',
center: '',
right: 'prev,next'
}
});
});
$(window).load(function() {
var aclass = $('a.holiday').attr('class');
var astyle = $('a.holiday').attr('style');
var atext = $('a.holiday').html();
$('a.holiday').replaceWith('<span style="'+ astyle +'" class="'+ aclass +'">'+ atext +'</span>');
});