这个答案纯粹是 JavaScript 编写的,但我猜是非常简单的。由于 Shiny 使用随机数 Id 创建选项卡,并且不提供对其使用的 Id 的访问权限,因此这确实是在客户端完成的。但无需了解 JavaScript 即可将其实现到其他场景。 JavaScript 部分仅用于复制/粘贴,触发命令很容易理解。
我做了什么?我安装了一个功能,可以找到与所需选项卡相对应的导航栏链接,然后单击它。该实用程序可以添加到任何具有“onclick”属性的元素。不需要特殊标签(例如不需要“a”标签)。
下面的代码应该可以轻松自定义此解决方案以满足您的需求。
注意:我使用了原始代码box
,虽然没有任何视觉效果。
Code:
library(shiny)
library(shinydashboard)
ui = shinyUI(
navbarPage("Header",
tabPanel("home",
tags$head(tags$script(HTML('
var fakeClick = function(tabName) {
var dropdownList = document.getElementsByTagName("a");
for (var i = 0; i < dropdownList.length; i++) {
var link = dropdownList[i];
if(link.getAttribute("data-value") == tabName) {
link.click();
};
}
};
'))),
fluidPage(
fluidRow(box("this 1st box should lead me to tab1a", onclick = "fakeClick('tab1a')")),
fluidRow(box("this 2nd box should lead me to tab1b", onclick = "fakeClick('tab1b')")),
fluidRow(box("this 2nd box should lead me to tab2", onclick = "fakeClick('tab2')"))
)
),
navbarMenu("tab1",
tabPanel("tab1a", "Some Text inside Tab 1a."),
tabPanel("tab1b", "Some Text inside Tab 1b.")
),
tabPanel("tab2", "Some Text inside Tab 2.")
)
)
server = function(input, output, session){}
runApp(shinyApp(ui, server), launch.browser = TRUE)
玩得开心!