在 rCharts 中,可以使用特殊的字符串符号设置 DataTables 的 JS 回调:#!函数(par){...}!#
。例如,让我们看一下以下 R 代码:
#JS callback to truncate long strings in table cells and add a tooltip
callback = "#!
function (nRow) {
$('td', nRow).each(function (index) {
var maxChars = 80;
var unfilteredText = $(this).text();
if (unfilteredText.length > maxChars && maxChars > 3) {
$(this).attr('title', unfilteredText);
$(this).html(unfilteredText.substring(0, maxChars-4) + '...');
}
});
return nRow;
} !#"
result <- dTable(df, aaSorting = list(c(5, "desc")), sPaginationType="full_numbers",
fnRowCallback=callback)
在 Shiny DataTables 中这可能吗?
最佳答案
我只是偶然发现了这个问题,并且能够使用此处的信息以及来自 this post 的第 4.5 节的帮助。解决这个问题。为了让它工作,您只需执行以下操作:
library(DT)
long_strings = replicate(10, paste(sample(c(0:9, letters, LETTERS), 135, replace = TRUE), collapse = ""))
dat <- data.frame(x = 1:10,
y = month.abb[1:10],
z = long_strings,
stringsAsFactors = FALSE)
DT::datatable(dat,
options = list(
rowCallback = JS("function(row, data) {",
" var max_chars = 80, full_text = data[3];",
" if (full_text.length > max_chars) {",
" $('td:eq(3)', row).attr('title', full_text);",
" $('td:eq(3)', row).html(full_text.substring(0, max_chars - 4) + '...');",
" }",
"}")))
重要的是要注意,因为我们希望它在每行的基础上运行,所以我们使用 options
的 inside 函数 rowCallback
范围。这与可以在整个表上使用的 callback
函数形成对比,它是 DT::datatable
的参数。
另请注意,您不必在 data[3] 上调用
。返回的值是该单元格的文本值。.text()
或 .innerHTML
或任何类似的东西]
希望将来有人偶然发现它并发现它有益。
关于javascript - 如何在 Shiny R 应用程序中设置 DataTables 行回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20824714/