Jquery 如何删除用户界面?

Jquery 如何删除用户界面?,jquery,r,user-interface,shiny,Jquery,R,User Interface,Shiny,我无法使用“删除”按钮删除UI。我试着加上这个 removeUI( selector = paste0("div:has(> #row", "_", input$addLine, " )"), multiple = TRUE, immediate = TRUE, session ) 但它不起作用。当我单击“删除”按钮时,什么也没有发生。我想知道我是否没有正确地在remove

我无法使用“删除”按钮删除UI。我试着加上这个

removeUI(
      selector = paste0("div:has(> #row", "_", input$addLine, " )"),
      multiple = TRUE,
      immediate = TRUE,
      session
    )
但它不起作用。当我单击“删除”按钮时,什么也没有发生。我想知道我是否没有正确地在
removeUI
函数中指定
选择器

有没有办法让这一切顺利进行,或者我应该尝试其他方法

以下是一个可复制的示例:

library(shiny)

newlist <- as.list(c("LV1", "LV2", "x1", "x2", "x3", "x4", "x5", "x6"))
symbol <- as.list(c("=~", "~"))

row_ui <- function(id) {
  ns <- NS(id)
  fluidRow(
    column(2,
           uiOutput(ns("ui_placeholder"))),
    column(2,
           uiOutput(ns("ui_placeholder3"))),
    column(2, 
           uiOutput(ns("ui_placeholder2")))
  )
} 

row_server <- function(input, output, session) {

  return_value <- reactive({paste(input$variable1, input$symbol1, paste(input$variable2, collapse = "+"))})
  ns <- session$ns
  output$ui_placeholder <- renderUI({
    selectizeInput(ns("variable1"), "LV:", choices = c(' ', newlist), options=list(create=TRUE), selected = NULL)
  })
  
  output$ui_placeholder2 <- renderUI({
    selectizeInput(ns("variable2"), "Ind:", choices = c(' ', newlist), options=list(create=TRUE), selected = NULL, multiple = TRUE)
  })
  
  output$ui_placeholder3 <- renderUI({
    selectizeInput(ns("symbol1"), "Type", choices = c(' ', symbol), options=list(create=TRUE), selected = NULL)
  })
  
  list(return_value = return_value) 
}

ui <- fluidPage(  
  div(id="placeholder"),
  actionButton("addLine", "+ LV"),
  actionButton("removeLine", "Remove UI")
)

server <- function(input, output, session) {
  
  handler <- reactiveVal(list())
  
  observeEvent(input$addLine, {
    new_id <- paste("row", input$addLine, sep = "_")
    insertUI(
      selector = "#placeholder",
      where = "beforeBegin",
      ui = row_ui(new_id)
    )
    
    handler_list <- isolate(handler())
    new_handler <- callModule(row_server, new_id)
    handler_list <- c(handler_list, new_handler)
    names(handler_list)[length(handler_list)] <- new_id
    handler(handler_list)
    
    removeUI(
      selector = paste0("div:has(> #row", "_", input$addLine, " )"),
      multiple = TRUE,
      immediate = TRUE,
      session
    )
})
}

shinyApp(ui, server)
库(闪亮)

newlist也许你正在寻找这个

library(shiny)

newlist <- as.list(c("LV1", "LV2", "x1", "x2", "x3", "x4", "x5", "x6"))
symbol <- as.list(c("=~", "~"))

row_ui <- function(id) {
  ns <- NS(id)
  fluidRow(
    column(2,
           uiOutput(ns("ui_placeholder"))),
    column(2,
           uiOutput(ns("ui_placeholder3"))),
    column(2, 
           uiOutput(ns("ui_placeholder2")))
  )
} 

row_server <- function(input, output, session) {
  
  return_value <- reactive({paste(input$variable1, input$symbol1, paste(input$variable2, collapse = "+"))})
  ns <- session$ns
  output$ui_placeholder <- renderUI({
    selectizeInput(ns("variable1"), "LV:", choices = c(' ', newlist), options=list(create=TRUE), selected = NULL)
  })
  
  output$ui_placeholder2 <- renderUI({
    selectizeInput(ns("variable2"), "Ind:", choices = c(' ', newlist), options=list(create=TRUE), selected = NULL, multiple = TRUE)
  })
  
  output$ui_placeholder3 <- renderUI({
    selectizeInput(ns("symbol1"), "Type", choices = c(' ', symbol), options=list(create=TRUE), selected = NULL)
  })
  
  list(return_value = return_value) 
}


ui <- fluidPage(  
  div(id="placeholder"),
  actionButton("addLine", "+ LV"),
  actionButton("removeLine", "Remove UI")
)

server <- function(input, output, session) {
  
  handler <- reactiveVal(list())
  ### keep track of elements/lines inserted and not yet removed
  inserted <- c()
  observeEvent(input$addLine, {
    new_id <- paste("row", input$addLine, sep = "_")
    insertUI(
      selector = "#placeholder",
      where = "beforeBegin",
      ui = tags$div(
        div(row_ui(new_id)),
        id = new_id
      )
    )
    # inserted <<- c(new_id, inserted)  ##  removes first one first
    inserted <<- c(inserted, new_id)    ##  removes last  one first
    
    handler_list <- isolate(handler())
    new_handler <- callModule(row_server, new_id)
    handler_list <- c(handler_list, new_handler)
    names(handler_list)[length(handler_list)] <- new_id
    handler(handler_list)

  })
  
  observeEvent(input$removeLine, {
    removeUI(
      ## pass in appropriate div id
      selector = paste0('#', inserted[length(inserted)])
    )
    inserted <<- inserted[-length(inserted)]
  })
  
}

shinyApp(ui, server)
库(闪亮)

新列表就是它。!