在 Rmarkdown 中,可以创建选项卡,例如:
---
output: html_document
---
# Tabs {.tabset}
## Tab 1
foo
## Tab 2
bar
我想知道是否可以创建任意数量的标签?如何以编程方式创建选项卡?
以下代码是执行此操作的一个糟糕尝试,但它会生成标题而不是选项卡。
---
output: html_document
---
# Tabs {.tabset}
```{r echo=FALSE}
shiny::tags$h2("Tab 1")
```
foo
## Tab 2
bar
Solution
感谢@GGamba 提供了一个很好的解决方案。我需要更进一步,能够添加选项卡作为循环的一部分,因此我需要进行两项更改。首先,我使用这段代码动态添加选项卡(这里唯一的区别是我强制评估hrefCode
在超时内,否则所有一起调用的超时将使用相同的值)
(function(hrefCode){setTimeout(function(){
var tabContent = document.createElement('div');
var tabContainerTarget = document.getElementsByClassName('tab-content')[0];
tabContent.setAttribute('id', 'tab-' + hrefCode);
tabContent.setAttribute('class', 'tab-pane')
tabContent.innerHTML = '", gsub('\n', '', Panel, fixed = TRUE), "';
tabContainerTarget.appendChild(tabContent);
}, 100);
})(hrefCode);
其次,要在循环中添加选项卡,您可以执行以下操作:
tabsToAdd <- list("tab3" = "hello", "tab4" = "world")
shiny::tagList(lapply(names(tabsToAdd), function(x) {
addToTabset(title = x, tabsetId = 'tbSet1',
tabPanel(x, tabsToAdd[[x]]))
}))