如何使用 JavaScript 更新闪亮的 htmlOutput 的内容

How to update the contents of htmlOutput in shiny using JavaScript

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

当用户选择句子的某些部分并单击 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 的情况下实现)。

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

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