在flexdashboard的DT表格中为单元格/行添加超链接
在flexdashboard中实现DT表格的可点击行与隐藏URL列
针对你在flexdashboard中用DT遇到的URL无法解析、想实现整行点击跳转且隐藏URL列的需求,以下是适配的完整解决方案:
完整代码示例
library(DT) library(flexdashboard) # 构造数据,website列存纯URL即可 df <- data.frame( fruit = c("apple", "pear", "banana"), colour = c("red", "green", "yellow"), website = c( "https://en.wikipedia.org/wiki/Apple#/media/File:Red_Apple.jpg", "https://dictionary.cambridge.org/dictionary/english/pear", "https://en.wikipedia.org/wiki/Banana#/media/File:Bananas.jpg" ) ) # 生成交互式表格 datatable( df, columnDefs = list( list(targets = 3, visible = FALSE) # 隐藏第三列(website) ), callback = JS( "table.on('click', 'tr', function() {", " var url = table.row(this).data()[2];", # JS索引从0开始,对应第三列数据 " if (url) {", " window.open(url, '_blank');", # 新窗口打开链接,也可以用window.location.href=url在当前页跳转 " }", "});" ), options = list( searching = TRUE, # 保留筛选功能 ordering = TRUE # 保留排序功能 ) )
关键配置说明
- 隐藏URL列:通过
columnDefs设置targets = 3(对应表格第三列),visible = FALSE,这样URL数据仍存在但不显示,节省表格宽度。 - 整行点击跳转:利用
callback参数注入JS代码,监听表格行的点击事件,获取当前行的URL数据(虽然列隐藏,但DT会保留所有行数据),点击后调用window.open在新窗口打开链接。如果需要在当前页面跳转,把window.open(url, '_blank')改成window.location.href = url即可。 - 如果需要显示可点击的URL列(不隐藏):如果不想隐藏URL列,只需把website列改成带HTML标签的格式,然后在
datatable中设置escape = -3(指定第三列不转义HTML),就能让链接正常显示并可点击:df <- data.frame( fruit = c("apple", "pear", "banana"), colour = c("red", "green", "yellow"), website = c( "<a href='https://en.wikipedia.org/wiki/Apple#/media/File:Red_Apple.jpg' target='_blank'>Apple</a>", "<a href='https://dictionary.cambridge.org/dictionary/english/pear' target='_blank'>Pear</a>", "<a href='https://en.wikipedia.org/wiki/Banana#/media/File:Bananas.jpg' target='_blank'>Banana</a>" ) ) datatable(df, escape = -3) # 第三列不转义HTML
内容的提问来源于stack exchange,提问作者whv20
相关产品推荐
相关产品推荐

