PivotTable.js 有条件地更改文本颜色
PivotTable.js conditionally change color on text
所以我正在与 PivotTable.js 一起工作,这对我的工作帮助很大。
虽然现在,我正在尝试让一个过滤器根据值更改单元格的颜色或单元格内的字体。
例如,如果我的数据集中有一组日期
dates = ["N/A", "4/12/2016", "7/9/2024", "7/9/2024", "4/1/2013"]
我想在 2016 年 6 月 1 日之前的任何日期更改颜色。
我将我的数据作为变量在本地传递 'data' 如果这有什么不同的话
$(function(){
var derivers = $.pivotUtilities.derivers;
var renderes = $.extend($.pivoUtilities.renderers, $.pivotUtilities.export_renderers);
$("#pivot_table").pivotUI(data, {
derivedAttributes: function(data){
// not sure how to access the css of the element from here
}
rows: [],
cols: ["Name", "Date", "Organization", "Cost"],
renderers: renderers,
rendererName: "Table"
});
});
我已经尝试进入 derivedAttributes,但我尝试的一切都不起作用。
任何帮助或集思广益将不胜感激
所以...其实我自己解决了哈哈...
PivotTable.js 的一大优点是选项和排序的灵活性。所以我使用了 onRefresh 属性并为其提供了这个函数
onRefresh: function() {
var $labels = $('.pvtRowLabel')
var today = new Date();
var d = today.getDate();
var m = today.getMonth()+1;
var y = today.getFullYear();
var date;
var dateReg = /^\d{1,2}[\/]\d{1,2}[\/]\d{4}$/;
// Goes through each cell with the class '.pvtRowLabel'
for (var i=0; i<$labels.length; i++) {
if ($labels[i].innerHTML.match(dateReg)) {
date = $labels[i].innerHTML.split('/');
if (Number(date[2]) == y) {
if (Number(date[0]) == m) {
if (Number(date[1]) <= d) {
$('.pvtRowLabel').eq(i).addClass('expired');
}
} else if (Number(date[0]) < m) {
$('.pvtRowLabel').eq(i).addClass('expired');
}
} else if (Number(date[2]) < y) {
$('.pvtRowLabel').eq(i).addClass('expired');
}
}
};
},
之后,只需使用 css 选择器指定您要使用的颜色
.expired { background-color: #F08080 !important; }
我的解决方案的问题是它增加了浏览器的压力,因为它会在每次刷新 table 时检查 DOM 并添加 类。我不确定在第一次渲染时是否有办法完成此操作,因此这些单元格在生成时总是会被标记为已过期。
我通过编辑 pivot.min.js 文件进行了自定义着色。
您可能需要调整循环以隔离数据并在 js 文件中添加所需的 css 样式。
这是我发现的一种解决方案,可以更改 table 中单行的字体颜色,比如行号。 5:
$("#pivot-table").pivotUI(data, {
...
onRefresh: function (config) {
// Show row no.5 as red
$("#pivot-table").find('.pvtVal.row5').css('color', 'red');
},
...
});
所以我正在与 PivotTable.js 一起工作,这对我的工作帮助很大。
虽然现在,我正在尝试让一个过滤器根据值更改单元格的颜色或单元格内的字体。
例如,如果我的数据集中有一组日期
dates = ["N/A", "4/12/2016", "7/9/2024", "7/9/2024", "4/1/2013"]
我想在 2016 年 6 月 1 日之前的任何日期更改颜色。
我将我的数据作为变量在本地传递 'data' 如果这有什么不同的话
$(function(){
var derivers = $.pivotUtilities.derivers;
var renderes = $.extend($.pivoUtilities.renderers, $.pivotUtilities.export_renderers);
$("#pivot_table").pivotUI(data, {
derivedAttributes: function(data){
// not sure how to access the css of the element from here
}
rows: [],
cols: ["Name", "Date", "Organization", "Cost"],
renderers: renderers,
rendererName: "Table"
});
});
我已经尝试进入 derivedAttributes,但我尝试的一切都不起作用。
任何帮助或集思广益将不胜感激
所以...其实我自己解决了哈哈...
PivotTable.js 的一大优点是选项和排序的灵活性。所以我使用了 onRefresh 属性并为其提供了这个函数
onRefresh: function() {
var $labels = $('.pvtRowLabel')
var today = new Date();
var d = today.getDate();
var m = today.getMonth()+1;
var y = today.getFullYear();
var date;
var dateReg = /^\d{1,2}[\/]\d{1,2}[\/]\d{4}$/;
// Goes through each cell with the class '.pvtRowLabel'
for (var i=0; i<$labels.length; i++) {
if ($labels[i].innerHTML.match(dateReg)) {
date = $labels[i].innerHTML.split('/');
if (Number(date[2]) == y) {
if (Number(date[0]) == m) {
if (Number(date[1]) <= d) {
$('.pvtRowLabel').eq(i).addClass('expired');
}
} else if (Number(date[0]) < m) {
$('.pvtRowLabel').eq(i).addClass('expired');
}
} else if (Number(date[2]) < y) {
$('.pvtRowLabel').eq(i).addClass('expired');
}
}
};
},
之后,只需使用 css 选择器指定您要使用的颜色
.expired { background-color: #F08080 !important; }
我的解决方案的问题是它增加了浏览器的压力,因为它会在每次刷新 table 时检查 DOM 并添加 类。我不确定在第一次渲染时是否有办法完成此操作,因此这些单元格在生成时总是会被标记为已过期。
我通过编辑 pivot.min.js 文件进行了自定义着色。 您可能需要调整循环以隔离数据并在 js 文件中添加所需的 css 样式。
这是我发现的一种解决方案,可以更改 table 中单行的字体颜色,比如行号。 5:
$("#pivot-table").pivotUI(data, {
...
onRefresh: function (config) {
// Show row no.5 as red
$("#pivot-table").find('.pvtVal.row5').css('color', 'red');
},
...
});