首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当下一次切换时,如何在单击和关闭之前的两个菜单项之间切换?

问当下一次切换时,如何在单击和关闭之前的两个菜单项之间切换?
EN

Stack Overflow用户
提问于 2019-12-18 21:09:23
回答 1查看 588关注 0票数 1

我想做什么。我有一个菜单导航与两个菜单项,搜索和汉堡包图标相邻。

当我单击“菜单”时,div将显示菜单导航项,并在再次单击时关闭,原因是切换事件。

但是,当我打开“菜单”并切换回“搜索”位置时,应该显示一个不同的div,它会在切换时混淆这两种类型之间的逻辑结构。

因此,我想在搜索和菜单内容之间切换,不管选择/切换哪一个。若要关闭前一个(移除类并将类添加到下一个活动元素)。

我该怎么做?

HTML:

代码语言:javascript
复制
<a href="#" class="search js-search">SEARCH</a>

<a href="#" class="hamburger js-hamburger">MENU</a>

<nav class="navigation js-navigation">
    <div class="content hidden">
        <input type="search" placeholder="search" />
    </div>

    <div class="content hidden">
        <ul>
            <li><a href="#">Home</a></li>
            <li><a href="#">About</a></li>
            <li><a href="#">Contact</a></li>
        </ul>
    </div>
</nav>

JS:

代码语言:javascript
复制
(() => {
    const navigation = document.querySelector('.js-navigation');

    if(!navigation) {
        return;
    }

    const hamburger = document.querySelector('.js-hamburger');
    const search = document.querySelector('.js-search');

    let contents = document.querySelectorAll('.content');

    const onClick = (e) => {
        e.preventDefault();

        contents.forEach((content) => {
            content.classList.remove('hidden');
            content.classList.add('hidden');
        })
    }


    hamburger.addEventListener('click', onClick);
    search.addEventListener('click', onClick);
});
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-18 21:22:20

你难道不应该加上:

代码语言:javascript
复制
            if (content.classList.contains("hidden")) {

              content.classList.remove('hidden');
            } else {
              content.classList.add('hidden');
            }

改变classList对我没有作用,但这起了作用:

代码语言:javascript
复制
<html>

<body>

<a href="#" class="search js-search" onClick="toggle('search');">SEARCH</a>

<a href="#" class="hamburger js-hamburger" onClick="toggle('menu');">MENU</a>

<nav class="navigation js-navigation">
    <div id="search" class="content">
        <input type="search" placeholder="search" />
    </div>

    <div id="menu" class="content">
        <ul>
            <li><a href="#">Home</a></li>
            <li><a href="#">About</a></li>
            <li><a href="#">Contact</a></li>
        </ul>
    </div>
</nav>

<script>

function toggle(id) {
    var isHidden = document.getElementById(id).style.visibility == "hidden";
    document.getElementById(id).style.visibility = isHidden ? "visible" : "hidden";
}
</script>

</body>
</html>

似乎您也可以选择使用classList.toggle:

代码语言:javascript
复制
const navigation = document.querySelector('.js-navigation');

const hamburger = document.querySelector('.js-hamburger');
const search = document.querySelector('.js-search');

let contents = document.querySelectorAll('.content');

const onClick = (e) => {
    e.preventDefault();

    contents.forEach((content) => {
        content.classList.toggle('hidden');
    })
}


hamburger.addEventListener('click', onClick);
search.addEventListener('click', onClick);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59400012

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档