【问题标题】:How to update the contents of htmlOutput in shiny using JavaScript如何使用 JavaScript 更新 htmlOutput 的内容
【发布时间】:2017-05-21 05:10:47
【问题描述】:

闪亮的应用程序会显示一个句子。

当用户选择句子的某个部分并单击Mark 按钮添加标记时,应更新句子以反映动作。

示例:
示例输入:演示的示例句子
选择:句子为
期望的输出:一个样本<markup> sentence for </markup> 演示

以下是闪亮的应用代码和相关的 JavaScript 代码:

library(shiny)
ui <- fluidPage(
  tags$head(tags$script(src="addMarkup.js")),
  titlePanel("Mark text selection"),
    mainPanel(htmlOutput("content"),
      actionButton("Mark", "Mark", onclick="addMarkup()")
    )
  )

server <- function(input, output) {
  sentence <- "A sample sentence for demo" 
  output$content <- renderText(sentence)
}

shinyApp(ui = ui, server = server)

addMarkup.js

function addMarkup(){
  var sent="";
  sent= document.getElementById("content").innerHTML;
  var selection="";
  if(window.getSelection){
    selection = window.getSelection().toString();
  }
  else if(document.selection && document.selection.type != "Control"){
    selection = document.selection.createRange().text;
  }
  marked = "<markup>".concat(selection).concat("</markup>");
  result = sent.replace(selection, marked);
  alert(result);
  document.getElementById("content").innerHTML = result;
}

问题:alert(result) 确实显示了所需的输出,但后续行没有更新content

我怎样才能实现这个功能?

还请建议是否存在纯闪亮的解决方案(我如何在不涉及 JavaScript 的情况下实现)。

【问题讨论】:

    标签: javascript r shiny shiny-reactivity


    【解决方案1】:

    您的代码正在运行。问题是&lt;markup&gt; 标签在 HTML 中不存在。如果您将&lt;markup&gt; 更改为&lt;mark&gt;,它将起作用。

    marked = "<mark>".concat(selection).concat("</mark>");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-07
      • 2018-10-29
      • 1970-01-01
      • 2010-12-11
      • 1970-01-01
      相关资源
      最近更新 更多