【问题标题】:How to expand wrapped text in a shiny datatable如何在闪亮的数据表中扩展包装文本
【发布时间】:2019-08-17 00:38:20
【问题描述】:

我有一个 Shiny 应用程序,其中的文本太长并且被截断。点击它时有没有办法“打开”(展开)这个文本?这是我的可重现示例:

datatable(iris[c(1:20, 51:60, 101:120), ], options = list(columnDefs = list(list(
  targets = 5,
  render = JS(
    "function(data, type, row, meta) {",
    "return type === 'display' && data.length > 6 ?",
    "'<span title=\"' + data + '\">' + data.substr(0, 6) + '...</span>' : data;",
    "}")
))), callback = JS('table.page(3).draw(false);'))

【问题讨论】:

  • 默认情况下,span 标签中的title 属性将在鼠标悬停在 Species 上时打开“显示”。如果您正在寻找类似模态的东西,请参阅here
  • @A.Suliman 是的,默认情况下会显示文本。问题是我需要复制整个文本,而使用默认选项是不可能的。似乎模态是我正在搜索的内容,但由于我对 JS 完全陌生,你能帮我实现我的代码吗?

标签: r shiny dt


【解决方案1】:

这是基于我之前回答的一种方法。请注意,如果您在浏览器中打开表格,details_open.png 会起作用,但在“RStudio 查看器”中不起作用,并且会显示为问号。

library(DT)
iris$Sepal.Width <- 'Verrrrrrrrry Looooooooooooooong Commmmmmment'

iris_upd <- cbind(' ' = '<img src=\"https://raw.githubusercontent.com/DataTables/DataTables/master/examples/resources/details_open.png\"/>', iris)

datatable(
    iris_upd, 
    escape = -2,
    options = list(
      columnDefs = list(
        list(visible = FALSE, targets = c(0)),
        list(orderable = FALSE, className = 'details-control', targets = 1),
        list(
    targets = 3,
    render = JS(
      "function(data, type, row, meta) {",
      "return type === 'display' && data.length > 6 ?",
      "'<span title=\"' + data + '\">' + data.substr(0, 6) + '...</span>' : data;",
      "}")
  )
      )
    ),
    callback = JS("
                  table.column(1).nodes().to$().css({cursor: 'pointer'});
                  var format = function(d) {
                  return'<p>' + d[3] + '</p>';
                  };
                  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('<img src=\"https://raw.githubusercontent.com/DataTables/DataTables/master/examples/resources/details_open.png\"/>');
                  } else {
                  row.child(format(row.data())).show();
                  td.html('<img src=\"https://raw.githubusercontent.com/DataTables/DataTables/master/examples/resources/details_close.png\"/>');
                  }
                  });"
  ))

使用列名

JS("
            table.column(1).nodes().to$().css({cursor: 'pointer'});
            var format = function(d, ind, tit) {
            out = '';
            for(i=0; i<ind.length; i++){
               out += tit[ind[i]] + ':' + '&ensp;' + d[ind[i]] + '<br>';
            }
            return out;
            };
            table.on('click', 'td.details-control', function() {
            var td = $(this), row = table.row(td.closest('tr'));
            var title = table.columns().header();    //Getting all column names 'headers' 
            title_names = [];
            for (i = 0; len = title.length, i < len; i++) { 
            title_names.push(title[i].innerText);
            }
            nms = ['Species','Sepal.Width'];    //Define column names here 
            indices = [];
            for (i=0; i<nms.length; i++){
            indices.push(title_names.indexOf(nms[i]))
            }
            if (row.child.isShown()) {
            row.child.hide();
            td.html('<img src=\"https://raw.githubusercontent.com/DataTables/DataTables/master/examples/resources/details_open.png\"/>');
            } else {
            row.child(format(row.data(), indices, title_names)).show();
            td.html('<img src=\"https://raw.githubusercontent.com/DataTables/DataTables/master/examples/resources/details_close.png\"/>');
            }
            });"
)

【讨论】:

  • 啊非常感谢你,我正在完成代码的实现,但你在我之前完成了。顺便说一句,效果很好!
  • 我有最后一个问题:如何将return'&lt;p&gt;' + d[3] + '&lt;/p&gt;'; 设置为不指向第三列,而是指向列名(或多列)?我有一个动态表,指向行号不方便。
  • @Schottky 这是一个有趣的问题,但我不知道该怎么做。我会检查并让你知道;)。
  • 谢谢,我正在尝试不同的命令/代码,但我想不通
  • 现在完美运行。顺便说一句,我在您编辑之前修复了评论(我想这就是问题),但可能我没有清除环境:D 但是,非常感谢!
猜你喜欢
  • 2020-10-20
  • 1970-01-01
  • 2014-08-22
  • 1970-01-01
  • 2019-10-23
  • 2018-11-23
  • 2021-04-11
  • 2021-03-07
  • 1970-01-01
相关资源
最近更新 更多