I am trying append a reactive text (the color name from selectInput
) to the body of a shiny app after tags$h3
. I guess this is more a jquery issue, but right now it keeps adding the selected color rather than displaying the string "reactively".
What I would like instead is to have the string inside h3.colorLabel
to be replaced.
ui.R
library(shiny)
jsCode <- "shinyjs.pageCol = function(params){
$('body').css('background', params);
/*$('.colorName').after('<h3></h3>').addClass('colorLabel');
$('h3.colorLabel').replaceWith('<h3>'+params+'</h3>').addClass('colorLabel');
*/
$('h3.colorName').after('<h3>'+params+'</h3>').addClass('colorLabel');
};
"
shinyUI( fluidPage(
useShinyjs(),
extendShinyjs(text = jsCode),
selectInput("col", "Colour:",
c("white", "yellow", "red", "blue", "purple")),
tags$h3('Just in case you are color-blind, the background color is:', class='colorName')
))
server.R
library(shiny)
library(shinyjs)
shinyServer(
function(input,output,session) {
observeEvent(input$col, {
js$pageCol(input$col)
})
})
I think this is what you want. It edits the innerhtml of the
h3' element with the
colorLabel` class. I also added a corresponding empty initialized element to the ui code so there would be something to edit.yielding:
And this is what is being edited internally: