javascript - 通过 R DT::datatables 中的 JS 回调呈现 HTML
问题描述
在这里处理 tomasreigl 的示例(https://github.com/rstudio/DT/issues/393#issuecomment-279627237),我认为由于基本的 JS 问题,我有一个不起作用的细微变化。
创建数据
library(DT)
dataSet <- data.frame(name=c("Jack", "Jill"),
age=c(25,25),
tableHtml=c("<table><tr><th>Value A</th><th>Value B</th></tr><tr><td>1</td><td>2</td></tr></table>",
"<div><table><tr><th>Value A</th><th>Value B</th></tr><tr><td>3</td><td>4</td></tr></table></div>"),
stringsAsFactors=FALSE)'
方法 1,在 DT 表中渲染 HTML 表 WORKING,但不是我需要的
现在,我想做的是将 html 表渲染为 DT 交互式表中每一行的嵌套子级。第一个块有效,但显然会为每个 DT 行呈现相同的表,因为 HTML 在回调中是硬编码的:
## Working, but same child table for every row
DT::datatable(
cbind(' ' = '⊕', dataSet),
escape = -2,
options = list(
columnDefs = list(
list(visible = FALSE, targets = c(0,4)),
list(orderable = FALSE, className = 'details-control', targets = 1)
)
),
callback = JS("
table.column(1).nodes().to$().css({cursor: 'pointer'});
var format = function(d) {
return '<div><table><tr><th>Value A</th><th>Value B</th></tr><tr><td>1</td><td>2</td></tr></table></div>'
};
table.on('click', 'td.details-control', function() {
var td = $(this), row = table.row(td.closest('tr'));
if (row.child.isShown()) {
row.child.hide();
td.html('⊕');
} else {
row.child(format(row.data())).show();
td.html('⊖');
}
});"
)
)
方法 2 为每一行渲染不同的 HTML 表不起作用
进入tableHtml
数据框的列dataSet
。对于数据框的每一行,dataSet
我想使用tableHtml
数据框列中的 HTML 渲染一个 DT 表行,其中一个子行包含一个表dataSet
。下面,我尝试只返回d[4]
,但返回原始 HTML 而不呈现表格。
## Attempt at different child table for each row
datatable(
cbind(' ' = '⊕', dataSet),
escape = -2,
options = list(
columnDefs = list(
list(visible = FALSE, targets = c(0,4)),
list(orderable = FALSE, className = 'details-control', targets = 1)
)
),
callback = JS("
table.column(1).nodes().to$().css({cursor: 'pointer'});
var format = function(d) {
return d[4]
};
table.on('click', 'td.details-control', function() {
var td = $(this), row = table.row(td.closest('tr'));
if (row.child.isShown()) {
row.child.hide();
td.html('⊕');
} else {
row.child(format(row.data())).show();
td.html('⊖');
}
});"
)
)
我尝试了大约 20 种变体,但没有一个能按预期工作。事实上,我对 thomasreigl 示例的第一次修改确实有效,这让我认为这只是一个超出我能力范围的 JS 小问题。任何帮助表示赞赏。
解决方案
好吧,还有 2 个小时的摆弄,结果变成了escape = -2
成功escape = FALSE
的秘诀。
推荐阅读
- swift - swift - 使用 for 循环将多个 cellForRows 保存到 CoreData
- ios - App 中的 Https 和 Database - App Store 年终自分类报告
- javascript - 笑话模拟函数不注册调用
- android - 无法从 Metro 捆绑器获取状态。阅读 ECONNRESET
- scala - Scala with play:尝试通过 websocket 发送数据时出现 Class Cast Exception
- azure - 天蓝色的功能级授权授权密钥它正在使用哪个机制?
- javascript - 如何确保 Chrome 上 HTML 视频的自动播放脚本能够正常工作?
- angular - Angular 7 fullpage.js 和 AOS
- node.js - 如何在 NodeJS 中正确编写路由器模块的单元测试
- class - C++11:如何在行为类似于子类的类中创建枚举类?