【发布时间】:2021-05-06 19:19:24
【问题描述】:
我正在使用 jQuery DataTables 插件创建一个考勤跟踪器!我在功能/能力方面已经走得很远,并且已经被困了几个星期,试图弄清楚如何完成我想要它做的最后一部分。
我将在下面附上一个静态/可行的测试用例。所以我无法弄清楚的问题是如何根据子行单元格值设置父行的样式。 Sunday-Friday 列根据名为 SundayStatus、MondayStatus、TuesdayStatus 等的隐藏值进行着色。有两个值可能导致它变绿 (TW & P),两个值可能导致它变黄 (NR & O),还有两个值导致它变红 (PTO & H)。在我的rows.every(function ( rowIdx, tableLoop, rowLoop ) { 函数中,我需要找到一种方法来操作数据并根据每一天的出勤值向父行添加类。
P.S.(我创建了自己的插件 $.fn.dataTable.ext.search.push(function 来搜索表中的所有数据,并且只显示周日至周五的日期是本周日期的项目。
5/10 更新 Andrew 的答案更新在正确的轨道上,我对今天的格式做了一个小改动,并将 var result = Object.keys(data).find(key => data[key].substring(0,10) === today); 更改为 @ 987654325@。然后,我在我的动态代码中创建了一个条件,以读取反向查找的结果,并根据结果将行着色为某种颜色。
这是我之前在帖子中的 sn-p 中的静态示例的 JSFiddle:https://jsfiddle.net/BeerusDev/y8t0xoze/19/
在此更新中,我没有预见到的最后一个也是最后一个问题是,一切似乎都工作正常,但它从发布到 DataTable 的第一个项目中附加了状态类,并且没有'不考虑其他项目。我遇到了一个心理障碍,试图找出解决这个问题的方法,但这是我的 rows.every 函数来自我的动态应用程序,它位于我的 startRender 函数中
var statusClass = '';
rows.every(function ( rowIdx, tableLoop, rowLoop ) {
var data = this.data();
var node = this.node();
var today = moment().format("YYYY-MM-DD"); // "05/10/2021"
console.log(today);
//console.log(JSON.stringify(data));
var result = Object.keys(data).find(key => typeof data[key] === 'string' && data[key].startsWith(today)); // "Monday"
console.log(result);
var todayStatus = result ? data[result + 'Status'] : 'n/a';
console.log(todayStatus);
if(todayStatus === "P" || todayStatus === "TW") {
statusClass = 'green';
}
if(todayStatus === "NR" || todayStatus === "O") {
statusClass = 'yellow';
}
if (todayStatus === "PTO" || todayStatus === "H") {
statusClass = 'red';
}
});
//Add category name to the <tr>.
return $('<tr/>').addClass(statusClass)
.append('<td colspan="8">' + group + ' (' + rows.count() + ')</td>')
.attr('data-name', all)
.toggleClass('collapsed', collapsed);
【问题讨论】:
标签: javascript jquery datatables