引用 rmarkdown/js 中的嵌套选项卡?

referencing a nested tab in rmarkdown/js?

我对 JavaScript 或 CSS 不太熟悉,但我在 RMarkdown 中使用了它的一些片段。我正在处理一个包含 tiles/buttons 页面的文档,该页面用作导航按钮以转到我的 RMarkdown 中的其他选项卡(将此代码归功于 Allen O'Brien!)。这些都很好,但我想知道如何创建一个导航到特定 sub-tab 的磁贴。例如,我有这三个按钮:

{js, echo = FALSE}

// Set destination for clicks on the id tabs after page is ready
$(document).ready ( function () {

// When tile 1 (#tile1) is clicked, navigate to the report-details tab.
$( "#tile1" ).on( "click", function() {
$('.nav-pills li a[href="#individuals"]').tab('show');
});

// When tile 2 (#tile2) is clicked, navigate to the report-details tab.
$( "#tile2" ).on( "click", function() {
$('.nav-pills li a[href="#hormone-plots"]').tab('show');
});

// When tile 3 (#tile3) is clicked, navigate to the report-details tab.
$( "#tile3" ).on( "click", function() {
$('.nav-pills li a[href="#species-comparison"]').tab('show');
});


});

这些选项卡中的每一个在该页面上都有我创建的其他选项卡,就像这样的新选项卡集:

## Individuals {- .tabset}

### #4 {- .tabset}

我想要做的是有一个按钮,让我们说个人 #4,而不是必须单击个人按钮,然后单击该页面上的个人 #4 子选项卡。有什么建议吗?

这是一个更清晰的更新 - 这就是我当前的降价文档的设置方式。亮点是包含所有按钮的页面。现在所有按钮都引用 headers 和两个 ##(如 Individual Whales),但我正在尝试构建也可以引用 ### headers 的按钮(如 Blue Whale 617698)

# {- .tabset .tabset-fade .tabset-pills}

## Highlights {-}

<div>
  <div class="info-tile" id="tile1" style = "background: salmon;">
   <span class = "info-tile-large-text">Individual Profiles</span> <br />
  </div>
  
</div>

## Individual Whales {- .tabset}

### Blue Whale 617698 {- .tabset}

哇!这看起来并没有那么难,但是哇!我发现了很多破坏标签集的方法!

无论您嵌套选项卡集的数量或深度如何,这里都有一个方法。

我最终使用 JS 而不是 JQuery。我在巢中巢中使用了巢中巢,所以我可以确保它仍然可以工作。如果这超过了顶部,请告诉我,我会制作一个更简单的版本。

右图显示第 3 个 level-1 tabset 的第一个 level-2 tabset 是 'Individuals' > 4 所在的位置。

您可以在标题下方看到您的按钮 'Analysis.' 该按钮可以移动到任何地方(我想测试一下)并且它仍然有效。

样式仅适用于按钮。

---
title: "Untitled"
author: "me"
date: "4/9/2022"
output: html_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)
```

<style>
.info-tile {
  vertical-align: middle;
  -moz-box-shadow: 0px 10px 14px -7px #000000;
  -webkit-box-shadow: 0px 10px 14px -7px #000000;
  box-shadow: 0px 10px 14px -7px #000000;
  -moz-border-radius: 4px;
  -webkit-border-radius: 4px;
  border-radius: 4px;
  border: 1px solid salmon;
  display: inline-block;
  font-size: 20px; 
  padding: 6px 50px;
  text-decoration: none; /*no underline!!*/
  cursor: pointer;
}
.info-tile:active { /*simulate movement*/
  position: relative;
  top: 1px;
}
</style>

嵌套标签集

# Analysis {.tabset .tabset-fade .tabset-pills}

<a class="info-tile" id="tile1" style="background: salmon; color:black; font-face: bold;">Individual Profiles</a>

## 1

### 1 A {.tabset .tabset-fade .tabset-pills}

#### 1.1 

```{r p11, echo=FALSE}
plot(x = 1, y = 2)
```

#### 1.2

```{r p12, echo=FALSE}
plot(x = 1, y = 2)
```

## 2

### 2 A  {.tabset .tabset-fade .tabset-pills}

#### 2.1

```{r p21, echo=FALSE}
plot(x = 1, y = 2)
```

#### 2.2

```{r p22, echo=FALSE}
plot(x = 1, y = 2)
```

## 3 

### Individuals {.tabset .tabset-fade .tabset-pills}

#### 4                   <!--- BUTTON TARGET IS HERE!!!---->

```{r p1, echo=FALSE}
plot(x = 1, y = 2)
```
    
#### 3.2 

```{r p2, echo=FALSE}
plot(x = 4, y = 10)
```

----

### 3 B {.tabset .tabset-fade .tabset-pills}

#### 3.3

```{r p3, echo=FALSE}
plot(x = 1, y = 10)
```

#### 3.4

```{r p4, echo=FALSE}
plot(x = 1:100, y = 100:1)
```

最后但同样重要的是,使按钮执行此操作的 JS

```{r mine,results="asis",engine="js"}
// send me where I realllllly want to go
setTimeout(function(){
  document.querySelector('a#tile1').addEventListener('click', doIt);
  function doIt(){
    document.querySelector('a[href*="#section-6"]').click(); //section 3
    document.querySelector('a[href*="#section-7"]').click(); // Indiv 4
  }
}, 100); // a tiny delay... just in case I'm running behind

```