javascript - 显示一个或多个元素及其已隐藏的内容

标签 javascript

我被困住了,不确定如何继续前进。我希望能够单击一个选项卡以显示其内容。使用我目前拥有的代码,当我单击单个选项卡时,它会显示所有选项卡的内容。但我只希望点击显示与该单个选项卡关联的内容。我正在寻找普通的 javascript 解决方案。

这是代码:http://codepen.io/anon/pen/KCJAc (下面内联)

CSS:

.tab-content {
    display: block;
    height: 0;
    opacity: 0;
    overflow: hidden;
    transition: all 1s ease-out;
}

.tab-active {
    height: auto;
    opacity: 1;
}

JavaScript:

var tabHeaders = document.getElementsByClassName('tab-header');
for (var i = 0; i < tabHeaders.length; i++) {
    tabHeaders[i].addEventListener('click', activateTab);
}

function activateTab() {
    var tabContents = document.getElementsByClassName('tab-content');
    for (var i = 0; i < tabContents.length; i++) {
        tabContents[i].classList.add('tab-active');
    }
}

HTML:

<div>
  <h3 class="tab-header">Tab1</h3>
  <p class="tab-content">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Accusantium odio iste aliquam molestias corporis blanditiis nihil soluta sint illum quibusdam reprehenderit sed quaerat iusto maiores error iure ducimus dicta ipsum.</p>
</div>

<div>
  <h3 class="tab-header">Tab2</h3>
  <p class="tab-content">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Accusantium odio iste aliquam molestias corporis blanditiis nihil soluta sint illum quibusdam reprehenderit sed quaerat iusto maiores error iure ducimus dicta ipsum.</p>
</div>

最佳答案

您正在将 tab-active 添加到 所有 tab-content 元素。您只想将它​​添加到被单击的 header 之后的那个:Updated Pen

var tabHeaders = document.getElementsByClassName('tab-header');
for (var i = 0; i < tabHeaders.length; i++) {
    tabHeaders[i].addEventListener('click', activateTab);
}

function activateTab() {
    var tabContents = this.nextElementSibling;
    while (tabContents && (!tabContents.classList || !tabContents.classList.contains("tab-content"))) {
        tabContents = tabContents.nextElementSibling;
    }
    if (tabContents) {
        tabContents.classList.toggle("tab-active");
    }
}

注意事项:

  • 我正在使用 nextElementSibling 获取作为元素的下一个同级元素,因为您在原始版本中使用了 classList,所以我认为您只是公平地使用此代码最新的浏览器。如果您打算在较旧的浏览器上使用它,则可以改用 nextSibling(并且还可以使用 className 而不是 classList

关于javascript - 显示一个或多个元素及其已隐藏的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21108518/

相关文章:

javascript - 将菜单修复为响应式菜单.. css/jquery

javascript - 使用客户端 Javascript 与本地网络上的设备通信

javascript - 我应该使用 Promise.All 而不是 async.each 吗?

javascript - Primefaces datePicker范围过滤器结束日期问题

javascript - 为什么 findOne({ id }) 在 mongoose 6.012 中无法正常工作

javascript - 在外部页面上运行 jQuery/调试 jQuery

javascript - 使用 jquery/ajax 的基本表单提交不起作用

javascript - Bixby,单个 Javascript 函数中的多个 HTTP 调用?

javascript - 带滚动条的表格中的绝对/固定标题

javascript - yarn 遇到^(插入符号)时如何工作?