javascript - 单击行 dc.datable 时如何在不丢失过滤的情况下更改颜色

标签 javascript jquery dc.js

我有以下问题, 当我在 dc.js 中单击表格的行时,我想用另一种颜色标记背景,而不会丢失已完成的过滤。

我注意到命令

dc.redrawAll();

不允许填充行的底部,但如果我删除它,我将失去在单击时过滤其他图形的能力。

tabla.on('pretransition', function (table) {
                 table.selectAll('td.dc-table-column')
                                .on('click',function(d){
                if(filterKeys.indexOf(d.key)===-1)
                  filterKeys.push(d.key);
                else
                  filterKeys = filterKeys.filter(k => k != d.key);
                if(filterKeys.length === 0)
                  foodim.filter(null);
                else 
                    foodim.filterFunction(function(d) {
                    return filterKeys.indexOf(d) !== -1;
                  })
                 //dc.redrawAll();
                });


     table.selectAll('tr.dc-table-row')
                .on('click',function(d){

                     console.log($(this))
                    if($(this).hasClass('bg-info')){
                        $(this).removeClass('bg-info'); 
                } else {
                    $(this).addClass('bg-info').siblings().removeClass('bg-info');
                }
                 })

});

谁能帮帮我。 https://jsfiddle.net/ajey2987/kfmfkLj0/18/

最佳答案

我首先在移动设备上尝试了这个,我认为悬停掩盖了你想要的效果,所以我没有看到它。

通常最好让样式尽可能由数据驱动,而不是让许多不同的事件处理程序独立工作来更改样式。

在这种情况下,重绘似乎会导致表格替换元素,从而丢失您的类注释。

相反,我们可以根据行的键是否在 filterKeys 以及 pretransition 处理程序中来教表如何应用您的类:

                 table.selectAll('tr.dc-table-row')
                   .classed('bg-info', function(d) {
                       return filterKeys.indexOf(d.key)!==-1;
                   });

现在我们得到了想要的效果。我认为这段代码也更容易推理。

show filters on table

此外,我发现 bootstrap 的悬停效果会在悬停选定的行时使效果消失。这是因为它有一个更具体的选择器。所以我添加了一个更具体的:

.table-hover>tbody>tr.bg-info:hover>td {
  background-color: #6EaEe6;
}

你的 fiddle 叉:https://jsfiddle.net/gordonwoodhull/e0td50ug/8/

关于javascript - 单击行 dc.datable 时如何在不丢失过滤的情况下更改颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45578359/

相关文章:

javascript - dc.js - dataTable -- 组合数据行

javascript - 为什么我的 dc-js 轴显示得这么粗,而刷子过滤器显示为不透明的黑色?

javascript - 当 session 订阅事件发生时,stomp 客户端没有收到消息/通知

javascript - 可以让 Print.js 打印变量吗?

javascript - 将演示数据放入 core-list

javascript - 如何在链接按钮中使用<%= %>?

jquery - 背景覆盖+视差

javascript - 为什么在 mergeLatest 之后 subscribe() 不起作用?

javascript - 让 get() 返回一个 jQuery 对象

javascript - 交叉过滤多重分组