javascript - JQuery 根据单击的菜单项添加/删除类

标签 javascript jquery html css

我正在使用下面的 jquery 来显示/隐藏三个单独的侧边栏。目前该脚本仅将类添加到相关侧边栏,并在再次单击时将其删除。首先,我的脚本似乎不是实现这一目标的最精简的方法,而且我还想确保在任何时候只能激活一个侧边栏。

作为奖励,我还想将 .active 类添加到相关菜单项,只要它应用于关联的侧边栏。

任何帮助非常感谢!

HTML

<nav>
    <ul>
      <li class="artists"><a href="#">Artists</a></li>
      <li class="about"><a href="#">About</a></li>
      <li class="history"><a href="#">History</a></li>
    </ul>
</nav>

<aside class="sidebar artists">
    <li><h3><a href="#">Artist Name</a></h3></li>
</aside>

<aside class="sidebar about">
    <h5>Biographical content</h5>
</aside>

<aside class="sidebar history">
    <h5>Historical content</h5>
</aside>

SCSS

/* Main nav */
nav {
    float: right;
    margin-top: 3px;
    ul {
        margin: 0;
        height: 0;
    }
    ul li {
        display: inline-block;
        margin-right: 35px;
    }
}

.sidebar {
  width: 50%;
    height: 100%;
  position: fixed;
  top: 0;
    right: 0;
    margin-right: -50%;
    background: $black;
}

.sidebar.artists.active,
.sidebar.about.active,
.sidebar.history.active {
    margin-right: 0;
}

JS

$(function() {
    $( ".artists" ).click(function() {
        $( ".sidebar.artists" ).toggleClass( "active" );
    });
});

$(function() {
    $( ".about" ).click(function() {
        $( ".sidebar.about" ).toggleClass( "active" );
    });
});

$(function() {
    $( ".history" ).click(function() {
        $( ".sidebar.history" ).toggleClass( "active" );
    });
});

JSFiddle

最佳答案

试试这个:

HTML:

<ul>
      <li class="artists"><a href="#">Artists</a></li>
      <li class="about"><a href="#">About</a></li>
      <li class="history"><a href="#">History</a></li>
</ul>
<aside class="sidebar artists">
    <li><h5>Artist Name</h5></li>
</aside>

<aside class="sidebar about">
    <h5>Biographical content</h5>
</aside>

<aside class="sidebar history">
    <h5>Historical content</h5>
</aside>

CSS:

.active{
color:red;
font-size:25px;
font-weight:bold;
}


/* Main nav */
nav {
    float: right;
    margin-top: 3px;
    ul {
        margin: 0;
        height: 0;
    }
    ul li {
        display: inline-block;
        margin-right: 35px;
    }
}

.sidebar {
  width: 50%;
    height: 100%;
  position: fixed;
  top: 0;
    right: 0;
    margin-right: -50%;
    background: $black;
}

.sidebar.artists.active,
.sidebar.about.active,
.sidebar.history.active {
    margin-right: 0;
}

JS:

 $('li').click(function() {
    var subMenu = $(this).attr('class').substring(-1,7);
    $("aside.sidebar").removeClass('active');
    if ( !$( this ).hasClass( 'active' ) ) {
            $("aside."+subMenu).addClass('active');
    }
    $(this).siblings().removeClass('active');
    $(this).toggleClass('active');
});

FIDDLE

关于javascript - JQuery 根据单击的菜单项添加/删除类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35151227/

相关文章:

javascript - 如何每 2 分钟刷新一次 html 页面?

ajax - 当使用 JSON/AJAX 时,这些数据到底发送到哪里以及如何访问它?

php - fatal error : Call to a member function fetch_all() on boolean

javascript - jQuery 在回调后插入?

javascript - 返回循环中的每个响应

javascript - 尝试通过 jQuery 或 JavaScript 添加 Font Awesome 图标并使电话号码可点击

javascript - 结算表格问题

php - 按日期对 MySQL 查询结果进行分组,每个组都有标题和自己的 div

javascript - 如何在按下一个带有 zombiejs 的缓慢 ajax 调用的按钮后断言页面?

Javascript:如何判断元素是否在视口(viewport)中?