当前位置: 首页 > 知识库问答 >
问题:

打开嵌套选项卡时关闭选项卡

宋岳
2023-03-14

下面的示例有一个名为London的选项卡,其中有另一个名为Paris的选项卡。我怎么能在伦敦不结帐的情况下打开巴黎?

该示例直接来自W3SCHOOL,但经过了一些修改以适应我的用例。

null

<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
body {font-family: Arial;}

/* Style the tab */
.tab {
  overflow: hidden;
  border: 1px solid #ccc;
  background-color: #f1f1f1;
}

/* Style the buttons inside the tab */
.tab button {
  background-color: inherit;
  float: left;
  border: none;
  outline: none;
  cursor: pointer;
  padding: 14px 16px;
  transition: 0.3s;
  font-size: 17px;
}

/* Change background color of buttons on hover */
.tab button:hover {
  background-color: #ddd;
}

/* Create an active/current tablink class */
.tab button.active {
  background-color: #ccc;
}

/* Style the tab content */
.tabcontent {
  display: none;
  padding: 6px 12px;
  border: 1px solid #ccc;
  border-top: none;
}
</style>
</head>
<body>

<div class="tab">
  <button class="tablinks" onclick="openCity(event, 'London')">London</button>
</div>


<div id="London" class="tabcontent">
  <div class="tab">
  <button class="tablinks" onclick="openCity(event, 'Paris')">Paris</button>
  </div>
  <div id="Paris" class="tabcontent" >
    <h3>Paris</h3>
    <p>Paris is the capital of France.</p> 
  </div>
  <h3>London</h3>
  <p>London is the capital city of England.</p>
</div>

<script>
function openCity(evt, cityName) {
  var i, tabcontent, tablinks;
  tabcontent = document.getElementsByClassName("tabcontent");
  for (i = 0; i < tabcontent.length; i++) {
    tabcontent[i].style.display = "none";
  }
  tablinks = document.getElementsByClassName("tablinks");
  for (i = 0; i < tablinks.length; i++) {
    tablinks[i].className = tablinks[i].className.replace(" active", "");
  }
  document.getElementById(cityName).style.display = "block";
  evt.currentTarget.className += " active";
}
</script>
   
</body>
</html> 

null

我相信问题是,“活跃”班从伦敦消失,因此,一旦我向巴黎施压,就会关闭。但我不擅长jQuery。

我想它可以很容易地在W3接口上测试:https://www.w3schools.com/howto/tryit.asp?filename=tryhow_js_tabs

共有1个答案

燕璞
2023-03-14

您希望根据.tabcontent元素集合是否与目标选项卡共享同一父元素来筛选它们。

我还稍微重构了代码的一些其他部分,请比较一下,这些变化是不言自明的。

null

function openCity(evt, cityName) {
  let i, tabcontent, tablinks;
  const targetTab = document.querySelector(`#${cityName}.tabcontent`);
  tabcontent = [...document.getElementsByClassName("tabcontent")].filter(el => el.parentElement === targetTab.parentElement);
  for (i = 0; i < tabcontent.length; i++) {
    tabcontent[i].hidden = true;
  }
  tablinks = document.getElementsByClassName("tablinks");
  for (i = 0; i < tablinks.length; i++) {
    tablinks[i].classList.remove("active");
  }
  targetTab.style.display = "block";
  evt.currentTarget.classList.add("active");
}
body {
  font-family: Arial;
}


/* Style the tab */

.tab {
  overflow: hidden;
  border: 1px solid #ccc;
  background-color: #f1f1f1;
}


/* Style the buttons inside the tab */

.tab button {
  background-color: inherit;
  float: left;
  border: none;
  outline: none;
  cursor: pointer;
  padding: 14px 16px;
  transition: 0.3s;
  font-size: 17px;
}


/* Change background color of buttons on hover */

.tab button:hover {
  background-color: #ddd;
}


/* Create an active/current tablink class */

.tab button.active {
  background-color: #ccc;
}


/* Style the tab content */

.tabcontent {
  display: none;
  padding: 6px 12px;
  border: 1px solid #ccc;
  border-top: none;
}
<div class="tab">
  <button class="tablinks" onclick="openCity(event, 'London')">London</button>
</div>


<div id="London" class="tabcontent">
  <div class="tab">
    <button class="tablinks" onclick="openCity(event, 'Paris')">Paris</button>
  </div>
  <div id="Paris" class="tabcontent">
    <h3>Paris</h3>
    <p>Paris is the capital of France.</p>
  </div>
  <h3>London</h3>
  <p>London is the capital city of England.</p>
</div>
 类似资料:
  • 我正在尝试在我的网站上做一个标签功能,我希望有那个标签响应。所以我做了这样的代码: null null 现在我有两样东西, > 首先,我希望在单击标题(伦敦、巴黎、东京)时关闭选项卡,然后在单击该标题时从该标题中删除活动类。 其次,我希望有两个标签在行的响应,第三个标签在第二行,然后单击打开被点击的标签,然后向下推第三个标签。 任何提示都会有帮助,提前谢谢

  • 由于Firefox不再支持Control+T选项卡,我开始使用driver.execute_script(“window.open('url','new_window')”) 我正在尝试显示我打开的不同选项卡的标题,并在它们之间切换。对于下面的示例,我期望输出是facebook、google和返回到facebook。现在的输出是facebook、facebook、facebook. 我尝试了从这里

  • 因此,我有一个,我想冲浪到新选项卡中,链接是不可点击的,所以当我点击这个链接时,什么也不会发生,这将不起作用(甚至不手动): 这是我的web URL:

  • 我在主类中有这个类,用来在我的JTabbedPane上放置一个关闭按钮。问题是,例如,我打开了三个选项卡:journal、contact和upload,而contact选项卡是当前选择的选项卡。当我尝试关闭不是选定选项卡的日记选项卡时,关闭的是当前选定的选项卡。 这就是我调用选项卡的方法:

  • 我正在工作2个网址。我需要打开第一个URL,执行一些操作,并打开第二个URL。 openURL2(){执行操作}切换回URL1 当我使用driver.get或driver.navigate时,URL1会被关闭。在打开URL2的同时,有没有保留带有URL1的窗口?我正在使用selenium和JAVA

  • 问题内容: 我实现了带有ViewPager和TabsAdapter的ActionBarSherlock。它运作良好,但是现在我试图从另一个表中的“标签1”中加载的框架中“推送”。 该行为应类似于: 我的应用程序中有3个选项卡,启动时会看到第一个选项卡,其中有一个带有按钮的片段 按下第一个选项卡上的按钮,应替换第一个选项卡上的片段,并显示另一个片段 我试图实现这一点,但是在更换时有一个黑色的片段。