Отобразить блестящий заголовок actionButton во всплывающем окне при наведении курсора - PullRequest
1 голос
/ 29 мая 2019

Я провел исследование о том, как отображать заголовок actionButton при mouseover.Я понимаю javascript, но не уверен, как решить эту проблему.

На mouseover, я хочу, чтобы Title из Button отображалось, а не сам HTML-код.Я буду признателен за любую помощь или идеи, чтобы решить эту проблему.Ниже приведен код POC:

library(shiny)
library(DT)
library(dplyr)

shinyApp(
  ui = fluidPage(
    DT::dataTableOutput("table")
  ),
  server = function(input, output) {

  # create a summary table
    summary_iris <- group_by(iris, Species) %>%
      summarise(Count = n())

    summary_iris$Species <- levels(summary_iris$Species)

    shinyInput <- function(FUN, len, id, label, ...) {
      inputs <- character(len)

      for (i in seq_len(len)) {
        label <- summary_iris$Species[i]
        inputs[i] <- as.character(FUN(paste0(id, i),label=label, ...))
      }
      inputs
    }

    output$table <- DT::renderDataTable({
      DT <- summary_iris %>%
        mutate(Species = shinyInput(actionButton,
                                    nrow(summary_iris), 'button_', label = Species, class="bttn-unite",
                                    onclick = 'Shiny.onInputChange(\"select_button\",  this.id)'))
      DT::datatable(DT, rownames = FALSE, escape = FALSE,
                    options = list(rowCallback = JS(
                      "function(row, data) {",
                      "var full_text = data[0]",
                      "$('td:eq(0)', row).attr('title', full_text);",
                      "}")))
    })
  }
)

Еще раз, заранее благодарю вас за вашу помощь, указатели или примеры, которые я пропустил во время исследования.

Как мне сделать кнопку похожей на Кнопка «Объединить» на этом сайте ?Это не важно, но я тоже с этим боролся.

1 Ответ

2 голосов
/ 29 мая 2019

Вы можете использовать регулярное выражение для извлечения текста:

rowCallback = JS(
  "function(row, data) {",
  "  var r = />(.*)</;",
  "  var full_text = r.exec(data[0])[1]",
  "  $('td:eq(0)', row).attr('title', full_text);",
  "}")

Или вы можете превратить строку в объект HTML с помощью jQuery, а затем извлечь текст:

rowCallback = JS(
  "function(row, data) {",
  "  var full_text = $(data[0]).text();",
  "  $('td:eq(0)', row).attr('title', full_text);",
  "}")
...