【问题标题】:How to query elements in R Shiny如何在 R Shiny 中查询元素
【发布时间】:2019-10-20 19:51:35
【问题描述】:

我想根据 HTML 标签在我的 Shiny 应用程序中查询元素。例如,对于以下应用,如何访问所有 h1 元素,包括它们的标签和 id?

library(shiny)
ui <- fluidPage(
  h1("Get", id = "1"),
  h1("this", id = "2"),
  h2("But", id = "3"),
  h3("not", id = "4"),
  h4("that", id = "5")
)

server <- function(input, output) {}

shinyApp(ui = ui, server = server)

【问题讨论】:

  • 您的目标是从闪亮的应用程序中访问这些元素吗?
  • 是的。更具体地说,来自应用程序内呈现的 R Markdown 脚本。

标签: javascript html r shiny


【解决方案1】:

当您在问题中标记 javascript 时,找到基于 shinyJS/JS 的解决方案。

您可以使用以下代码来识别h1 元素:

var elements = document.getElementsByTagName('h1');
var sendToR = [];
for (var nr = 0; nr < elements.length; nr++) {
    var newElement = {};
    newElement['id'] = elements[nr].id;
    newElement['text'] = elements[nr].textContent;
    sendToR.push(newElement);
}

然后您可以通过以下方式将结果“发送”到 R:

Shiny.onInputChange('h1', sendToR)

并在 R 端接收:

observe({
    print(input$h1)
  })

可重现的例子:

library(shiny)
library(shinyjs)

ui <- fluidPage(
  useShinyjs(),
  h1("Get", id = "1"),
  h1("this", id = "2"),
  h2("But", id = "3"),
  h3("not", id = "4"),
  h4("that", id = "5")
)

server <- function(input, output) {
  observe({
    runjs("
      var elements = document.getElementsByTagName('h1');
      var sendToR = [];
      for (var nr = 0; nr < elements.length; nr++) {
          var newElement = {};
          newElement['id'] = elements[nr].id;
          newElement['text'] = elements[nr].textContent;
          sendToR.push(newElement);
      }
      Shiny.onInputChange('h1', sendToR)
    ")
  })

  observe({
    print(input$h1)
  })
}

shinyApp(ui = ui, server = server)

【讨论】:

    猜你喜欢
    • 2021-09-08
    • 1970-01-01
    • 1970-01-01
    • 2017-02-18
    • 2020-11-10
    • 1970-01-01
    • 2020-01-23
    • 1970-01-01
    • 2020-08-25
    相关资源
    最近更新 更多