我已设置:
output$tableId <-
DT::renderDataTable({DT::datatable(..., selection = "multiple")})
我想选择的背景色根据它的第一个选择,或第二个,等等。
应该可以使用length(input$tableId_rows_selected)
(描述为here)来获得这种行为?我猜结合创建一些CSS来修改它:
.table.dataTable tbody td.active, .table.dataTable tbody tr.active td {
background-color: #007bff;
color: white;
}
我对CSS、HTML和JavaScript知之甚少,所以我觉得这些东西很难。
- 编辑日期:2022年2月14日:**
在@StéphaneLaurent下面的初步回答之后,我想稍微改变一下我的问题:
我最喜欢的逻辑是:
1.我们有m
种独特的颜色。n < m
种以前的行已被选中。
1.第n+1
行被选中,然后以第n+1
颜色着色,并保持该颜色直到取消选中。
1.当前选择m
行时,不可能再选择其他行。另外,我还对以下内容感兴趣:当第m+1
行被选中时,它会被涂上第一种颜色,而其他占据这种颜色的行会被取消选中。m+1
行现在被选中,而当第m+2
行被选中时,它会被涂上第二种颜色,而其他占据这种颜色的行会被取消选中,依此类推。
此外:
- 由于我的应用程序将通过网站上的iframe运行,并且应用程序的底层数据将有1000万到1亿个观察值,我认为
DT::renderDataTable({...}, server = TRUE)
的解决方案会很好。 - 我还希望该解决方案能够与
DT::datatable(..., selection = list(mode = "multiple", selected = 1:3, target = "row"))
选项一起使用。
我将尝试实现上述使用@StéphaneLaurent答案,结合工具@YihuiXie说明here(应用程序从页面链接较早).
2条答案
按热度按时间wwtsj6pe1#
如果您使用以下CSS,则第一行将为红色(如果您选择它),第二行将为绿色,第三行将为蓝色:
这里
dtable
是id。下面是如何使用sass包为100行生成随机颜色的CSS。保存下面的scss文件,比如mystyle.scss:
现在将其编译为CSS文件:
将文件mystyle.css放入应用程序的www子文件夹中,然后将其包含在应用程序中,如下所示:
编辑:jQuery解决方案
EDIT:更正之前的编辑
下面是正确的JS代码:
EDIT:不带“Select”扩展名
ef1yzkbh2#
虽然从技术上讲,这并没有达到我最初的要求(即动态地改变选择颜色),但从最终用户的Angular 来看,这种实现的结果在视觉上看起来很相似。
该解决方案背后的思想是跟踪行选择计数器,通过代理更新表,并应用条件格式。