我有一些JavaScript会在SharePoint列表中为行添加颜色根据特定列中的值查看Web部件。 这部分工作正常,页面加载时行正确着色。 我遇到的问题是,当过滤列表时(如果单击任何列标题并按升序或降序排列),格式将丢失,颜色将消失。
我正在寻找一种在过滤器操作完成后保留格式或重新应用格式的方法。 如果刷新页面,则选定的过滤器将保留在原位并返回颜色。
我需要一种方法,一旦应用过滤器而不是仅仅在页面加载上重新应用颜色。
提前致谢。
这是我目前的JS:
SPClientTemplates.TemplateManager.RegisterTemplateOverrides({
OnPostRender: function(ctx) {
var rows = ctx.ListData.Row;
for (var i=0;i<rows.length;i++)
{
var trimmed = rows[i]["Age"]
var final = trimmed.replace(",", "");
var oneWeek = final < 7;
var oneToTwo = final >= 7 && final <= 14;
var twoOrMore = final > 14;
if (oneWeek)
{
var rowElementId = GenerateIIDForListItem(ctx, rows[i]);
var tr = document.getElementById(rowElementId);
tr.style.backgroundColor = "#CCFFCC";
}
else if (oneToTwo)
{
var rowElementId = GenerateIIDForListItem(ctx, rows[i]);
var tr = document.getElementById(rowElementId);
tr.style.backgroundColor = "#FFEECC";
}
else if (twoOrMore)
{
var rowElementId = GenerateIIDForListItem(ctx, rows[i]);
var tr = document.getElementById(rowElementId);
tr.style.backgroundColor = "#FFCCCC";
}
}
}
}
);
答案 0 :(得分:1)
经过大量调查后,事实证明我的格式在排序或过滤器发生后的最后一秒被覆盖。
解决方案是将其添加到代码的末尾: ctx.skipNextAnimation = true; 这会跳过显示所有行落入到位的动画,并允许我的格式化生效。
答案 1 :(得分:-1)
我建议检查 jquery.tablesorter.js ,这将保存您的样式。 在您的情况下,订购是在客户端,所以你必须在那里解决它。 您可以将它应用于简单表,并添加一个简短的js:
$(document).ready(function()
{
$("#myTable").tablesorter();
}
);