Как запросить элементы в R Shiny - PullRequest
2 голосов
/ 05 июня 2019

Я бы хотел запросить элементы в моем приложении Shiny на основе их HTML-тегов.Например, как в следующем приложении получить доступ ко всем элементам h1, включая их метку и идентификатор?

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)

1 Ответ

4 голосов
/ 05 июня 2019

Как вы отметили javascript в своем вопросе, найдите решение на основе блестящей JS / 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...