隐藏今日未发生的日历重复事件
隐藏当前日期/当天未发生的日历重复事件
引言
客户希望隐藏对当前日期不相关的日历重复事件。日历视图没有筛选重复日期的选项。
背景
日历视图在“所有事件”视图中显示所有事件,即使这些事件对当前日期无效。客户不希望向用户显示对今天(当前日期)不相关的事件。以下代码将帮助从日历视图中隐藏不需要的事件。
Using the Code
可以在当前视图的内容编辑器 Web 部件中使用 jQuery 代码块。此代码将首先使用 SPServices 和 CAML 查询检索所有重复事件,可以根据需要修改 CAML 查询。需要 RecurrenceData 的值来检查事件日期,HideTableRow
函数将决定是否隐藏当前事件。
RecurrenceData 字段的值如下所示
<recurrence>
<rule>
<firstDayOfWeek>su</firstDayOfWeek>
<repeat><weekly mo="TRUE" tu="TRUE"
weekFrequency="1" /></repeat>
<repeatInstances>100</repeatInstances>
</rule>
</recurrence>
HideTableRow
方法将决定是否从视图中隐藏当前事件,以下 jQuery 行将根据 用户名
和 目的
字段的值隐藏事件。任何包含这些值的行都将从视图中隐藏。可以根据需求更改此筛选器。
$('div#WebPartWPQ2 table.ms-listviewtable tr:(:contains("' + name + '")
&& contains("' + purpose + '"))').hide();
以下是隐藏事件的完整代码
//
<script src="jquery.min.js" type="text/javascript"></script>
<script src="jquery.SPServices.min.js" type="text/javascript"></script>
$(document).ready(function(){
$().SPServices({
operation: "GetListItems",
async: false,
listName: "Calender",
CAMLViewFields: "<ViewFields><FieldRef Name='Name' />
<FieldRef Name='fRecurrence' /><FieldRef Name='RecurrenceData' />
<FieldRef Name='Purpose' /></ViewFields>",
CAMLQuery: "<Query><Where><Eq><FieldRef Name='fRecurrence'
Explicit='TRUE'/><Value Type='Recurrence'>1
</Value></Eq></Where></Query>",
completefunc: function (xData, Status){
$(xData.responseXML).SPFilterNode("z:row").each(function(){
var xml = $(this).attr("ows_RecurrenceData");
var name = $(this).attr("ows_Name");
var purpose = $(this).attr("ows_Purpose");
var result = HideTableRow(xml);
if(result==true){
name = name.split('#')[1];
$('div#WebPartWPQ2 table.ms-listviewtable tr:(:contains
("' + name + '") && contains("' + purpose + '"))').hide();
}
});
}
});
});
function HideTableRow(xmlData)
{
var today=new Date();var thisDay=today.getDay();var hideRow=false;
$(xmlData).find('weekly').each(function() {
$.each(this.attributes, function(i, attrib){
var day = attrib.name;var value = attrib.value;
if(day.length==2){
if(!((thisDay==1 && day=="mo")||(thisDay==2 &&
day=="tu")||(thisDay==3 && day=="we")||
(thisDay==4 && day=="th")||(thisDay==5 && day=="fr"))){
hideRow=true;
}
else{hideRow=false;return false;}
}
});
});
return hideRow
}
//
关注点
我发现使用 jQuery 隐藏表格行很容易,可以在不编写复杂逻辑的情况下隐藏该行。:)
历史
- 2016年3月22日:初始版本