- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在 DT 表的行中包含 Shiny 的小部件,例如 textInput、selectInput(单个)、sliderInput 和 selectInput(多个)。当小部件直接放在页面上时,它们会正确显示,但是当它们放在表格中时,其中一些不会正确显示。
textInput 很好,selectInput(单个)除了一些 css 差异外大部分都很好,但是 selectInput(多个)显示不正确,sliderInput 肯定显示不正确。似乎依赖 javascript 的小部件是有问题的。有没有办法让这些widgets在DT表中正常工作?
这是我的可重现示例。在将小部件放入表中时,我使用了小部件的原始 HTML,但我直接从每个小部件的 shiny 函数生成的 HTML 中获取了它。
library(shiny)
library(DT)
ui <- fluidPage(
h3("This is how I want the widgets to look in the DT table."),
fluidRow(column(3, textInput(inputId = "text",
label = "TEXT")),
column(3, selectInput(inputId = "single_select",
label = "SINGLE SELECT",
choices = c("", "A", "B", "C"))),
column(3, sliderInput(inputId = "slider",
label = "SLIDER",
min = 0,
max = 10,
value = c(0, 10))),
column(3, selectizeInput(inputId = "multiple_select",
label = "MULTIPLE SELECT",
choices = c("", "A", "B", "C"),
multiple = TRUE))),
h3("This is how they actually appear in a DT table."),
fluidRow(DTOutput(outputId = "table"))
)
server <- function(input, output, session) {
output$table <- renderDT({
data <- data.frame(ROW = 1:5,
TEXT = '<input id="text" type="text" class="form-control" value=""/>',
SINGLE_SELECT = '<select id="single_select" style="width: 100%;">
<option value="" selected></option>
<option value="A">A</option>
<option value="B">B</option>
<option value="C">C</option>
</select>',
SLIDER = '<input class="js-range-slider" id="slider" data-type="double" data-min="0" data-max="10" data-from="0" data-to="10" data-step="1" data-grid="true" data-grid-num="10" data-grid-snap="false" data-prettify-separator="," data-prettify-enabled="true" data-keyboard="true" data-drag-interval="true" data-data-type="number"/>',
MULTIPLE_SELECT = '<select id="multiple_select" class="form-control" multiple="multiple">
<option value=""></option>
<option value="A">A</option>
<option value="B">B</option>
<option value="C">C</option>
</select>',
stringsAsFactors = FALSE)
datatable(data = data,
selection = "none",
escape = FALSE,
rownames = FALSE)
})
}
shinyApp(ui = ui, server = server)
最佳答案
对于 slider ,您必须从文本输入开始:
SLIDER = '<input type="text" id="s" name="slider" value="" />'
然后用 JavaScript 把它变成一个 slider :
js <- c(
"function(settings){",
" $('#s').ionRangeSlider({",
" type: 'double',",
" grid: true,",
" grid_num: 10,",
" min: 0,",
" max: 20,",
" from: 5,",
" to: 15",
" });",
"}"
)
参见 ionRangeSlider对于选项。
您可以使用 initComplete
选项传递 JavaScript 代码:
server <- function(input, output, session) {
output$table <- renderDT({
data <- data.frame(ROW = 1:5,
TEXT = '<input id="text" type="text" class="form-control" value=""/>',
SINGLE_SELECT = '<select id="single_select" style="width: 100%;">
<option value="" selected></option>
<option value="A">A</option>
<option value="B">B</option>
<option value="C">C</option>
</select>',
SLIDER = '<input type="text" id="s" name="slider" value="" />',
MULTIPLE_SELECT = '<select id="multiple_select" class="form-control" multiple="multiple">
<option value=""></option>
<option value="A">A</option>
<option value="B">B</option>
<option value="C">C</option>
</select>',
stringsAsFactors = FALSE)
datatable(data = data,
selection = "none",
escape = FALSE,
rownames = FALSE,
options =
list(
initComplete = JS(js)
))
})
}
然后你只得到第一行的 slider :
那是因为五个文本输入具有相同的 id。您必须为五个文本输入设置不同的 ID:
SLIDER = sapply(1:5, function(i) {
sprintf('<input type="text" id="Slider%d" name="slider" value="" />', i)
}),
然后使用这段 JavaScript 代码将它们变成 slider :
js <- c(
"function(settings){",
" $('[id^=Slider]').ionRangeSlider({",
" type: 'double',",
" grid: true,",
" grid_num: 10,",
" min: 0,",
" max: 20,",
" from: 5,",
" to: 15",
" });",
"}"
)
要设置 from
和 to
的初始值,最好将它们放在输入文本的 value
参数中,如下所示:
SLIDER = sapply(1:5, function(i) {
sprintf('<input type="text" id="Slider%d" name="slider" value="5;15" />', i)
})
js <- c(
"function(settings){",
" $('[id^=Slider]').ionRangeSlider({",
" type: 'double',",
" grid: true,",
" grid_num: 10,",
" min: 0,",
" max: 20",
" });",
"}"
)
要获得所需的多选显示,您必须调用 selectize()
:
MULTIPLE_SELECT = '<select id="mselect" class="form-control" multiple="multiple">
<option value=""></option>
<option value="A">A</option>
<option value="B">B</option>
<option value="C">C</option>
</select>'
js <- c(
"function(settings){",
" $('[id^=Slider]').ionRangeSlider({",
" type: 'double',",
" grid: true,",
" grid_num: 10,",
" min: 0,",
" max: 20",
" });",
" $('#mselect').selectize()",
"}"
)
同样,这仅适用于第一个多选。使用个人 ID 申请这五个。
最后,您必须绑定(bind)输入以获得它们在 Shiny 中可用的值:
datatable(data = data,
selection = "none",
escape = FALSE,
rownames = FALSE,
options =
list(
initComplete = JS(js),
preDrawCallback = JS('function() { Shiny.unbindAll(this.api().table().node()); }'),
drawCallback = JS('function() { Shiny.bindAll(this.api().table().node()); } ')
)
)
现在您可以获取 input$Slider1
、input$Slider2
、... 和 input$mselect
中的值。请注意,input$Slider[1/2/3/4/5]
以这种格式返回 slider 的值:"3;15"
。
关于javascript - DT 表中的 Shiny 小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55034483/
我有一个类为.dt-horizonal 的描述列表,其中我确保dt 内容不会被以下this 截断|发布并增加宽度。它工作正常,但是当有一个空的 dt 时它不起作用,因此下一个 dd(Canada)
当我运行以下代码时,我只得到 1 或 2 行数据。如何增加显示的行数?谢谢! --- title: " File Analysis" output: html_docu
我使用标签 DL-DT-DD 在网站上列出商店信息。该信息将由服务器生成并放置。 Shop Name US Master Autos Toll Free Not Available Fax (30
更新 我正在尝试使用 shiny 和 DT 制作应用,similar to the accepted answer from Shree here .你,我想添加以下内容: 扩展 Shree 的解决方
我有这个标记: Lot Size 324 sq. meters Baths 2 Full Description
有没有可能得到这个样子 来自这段代码(使用 CSS?) Latitude 50.0 Longitude 100.0 h (metres) 0.000 Vφ (mm/y) -6.4 Vλ (mm/y)
我正在做一些计算和行操作,并意识到对于某些任务,例如数学运算,它们都有效,例如 d['c3'] = d.c1 / d. c2 d['c3'] = d['c1'] / d['c2'] 我想知道是否在某些
我可以使用从任意模块转储类型 dt modulename!type 在某些情况下,我看到例如 dt nt!_TEB (并且它有效)尽管该模块名为 ntdll: 0:001> lm m nt start
我正在尝试制作一个交互式表格,总结在多项研究中测试的结果的最高结果,我还希望用户通过子行访问更详细的结果。主表中仅显示具有最小 p 值的“顶级”模型。 现在我将相关结果分为两个数据框:1. 仅顶部结果
Shiny 似乎改变了数据表的实现。这是什么原因? 除非我遗漏了什么,否则新的默认值看起来像是倒退了一步。一方面,他们缺少表格底部的特定于列的搜索框。有没有办法替换该功能? 最佳答案 它当然仍然存在,
所以我有一个类似这样的 dl 列表: .title { display: inline-block; padding-bottom: 20px; } dd { -moz-margin-st
我正在使用 PostgreSQL 8.4.20 版。由于工作问题和上面运行的现有数据库,我无法升级它。 我创建了一个如下所示的模式: -- -- Name: Bug Tracking; Type: C
我正在寻找类似 hive 的东西 Select * from table 1 where dt > (Select max(dt) from table2) 显然,hive 不支持 where 子句中
我的数据存储方式的示例 df: df = pd.DataFrame({'DOB': {0: '2003-01-01 00:00:00+00', 1: '2003-01-02 00:00:00+00'}
我想列出一个定义列表与 一列中的元素及其对应的 另一个元素。 棘手的部分是我想要我的 s 永远不会换行,如果它们对于第一列来说太宽,我想要 元素向下移动以腾出空间: 这是我的目标的屏幕截图: 这是
在我开始这个问题之前,我使用 P0、P1、P2 和 P3 作为四个立方贝塞尔曲线点,并且使用“t”因为它是参数化的。另外,我在这个网站和谷歌上搜索过类似的问题,但没有找到。如果这是一个常见问题,我深表
我正在尝试将两个常用共享的 JS 回调组合到一个 R 数据表 Shiny 应用程序(具有单选按钮(参见 https://yihui.shinyapps.io/DT-radio/ 和 Extractin
我正在尝试垂直滚动,但这不起作用,有人可以解释原因吗?我还想默认一次显示 20 行。 谢谢 title: "Untitled" output: flexdashboard::flex_dashbo
是否可以在 Rstudio DT 数据表中在标题参数中添加超链接?我已经尝试了很多次,但我似乎无法让任何事情发挥作用。我尝试了 w3schools fiddle 的 html 标题,我可以获得一个在表
是否可以在 Rstudio DT 数据表中在标题参数中添加超链接?我已经尝试了很多次,但我似乎无法让任何事情发挥作用。我尝试了 w3schools fiddle 的 html 标题,我可以获得一个在表
我是一名优秀的程序员,十分优秀!