如何格式化Shiny中DT包DataTables表格的筛选框?
解决DT筛选框数值格式化问题
要格式化DT顶部筛选框内的数值,仅靠formatRound只能处理表格内容,得借助JavaScript回调函数修改前端筛选控件的显示内容。以下是实现代码:
library(DT) library(dplyr) iris[,4:5] %>% mutate(x = runif(150)) %>% datatable( filter = 'top', options = list( initComplete = JS( "function(settings, json) { // 定位所有数值列的筛选下拉框 $(this.api().table().header()).find('.dt-filter-number').each(function() { var select = $(this).find('select'); // 遍历并格式化每个选项的数值文本 select.find('option').each(function() { var val = $(this).text(); if(!isNaN(val)) { $(this).text(parseFloat(val).toFixed(3)); } }); }); }" ) ) ) %>% formatRound(3)
代码说明
initComplete回调会在表格完全初始化后执行,确保能准确获取到筛选控件.dt-filter-number是DT为数值列筛选框自动添加的类,用来精准定位目标元素- 遍历每个筛选下拉框的选项,将纯数值文本转为浮点数后,用
toFixed(3)保留三位小数再更新显示
这样处理后,表格内容和筛选框内的数值会统一显示三位小数,解决了格式不一致的问题。
内容的提问来源于stack exchange,提问作者divibisan
相关产品推荐
相关产品推荐

