javascript - 如何在 Bootstrap 可折叠 sidenav 中添加事件类 onclick

标签 javascript html css bootstrap-4 sidebar

我正在尝试在单击时在 bootstrap collapsible sidenav 中添加/删除事件类。如果我单击特定选项卡,它应该处于事件状态,直到我切换到另一个选项卡。尝试使用 addclass/removeclass,但 html onclick 没有变化。在我的示例中,id 添加了“active”,但没有从其他元素中删除。谁能建议如何实现这一目标。

$(document).ready(function () {
            $('#sidebarCollapse').on('click', function () {
                $('#sidebar').toggleClass('active');
            });
        });
/* ---------------------------------------------------
    SIDEBAR STYLE
----------------------------------------------------- */

.wrapper {
    display: flex;
    align-items: stretch;
}

#sidebar {
    min-width: 250px;
    max-width: 250px;
    background: #dde4e8;
    color: #000;
    transition: all 0.3s;
}

#sidebar.active {
    min-width: 100px;
    max-width: 100px;
    text-align: center;
}

#sidebar.active .sidebar-header h3,
#sidebar.active .CTAs {
    display: none;
}

#sidebar.active .sidebar-header strong {
    display: block;
}

#sidebar ul li a {
    text-align: left;
}


#sidebar.active ul li a {
    padding: 20px 10px;
    text-align: center;
    font-size: 0.85em;
}

#sidebar.active ul li a icon{
    display:none;
}

#sidebar.active ul li a i {
    margin-right: 0;
    display: block;
    font-size: 1.8em;
    margin-bottom: 5px;
}

#sidebar.active ul ul a {
    padding: 10px !important;
}

#sidebar.active .dropdown-toggle::after {
    top: auto;
    bottom: 10px;
    right: 50%;
    -webkit-transform: translateX(50%);
    -ms-transform: translateX(50%);
    transform: translateX(50%);
}

#sidebar .sidebar-header {
    padding: 24px;
    background: #dde4e8;
    border-bottom: 1px solid #c60429 ;
}

#sidebar .sidebar-header1{
    padding: 20px;
    background: #dde4e8;
}

#sidebar .sidebar-header strong {
    display: none;
    font-size: 1.8em;
}

#sidebar ul.components {
    padding: 20px 0;
    border-bottom: 1px solid #c60429 ;
}

#sidebar ul li a {
    padding: 10px;
    font-size: 1.1em;
    display: block;
}

#sidebar ul li a:hover {
    color: #c60429 ;
    background: #fff;
}

#sidebar ul li a i {
    margin-right: 10px;
}

#sidebar ul li.active>a,
a[aria-expanded="true"] {
    color: #fff;
    background: #c60429;
}

a[data-toggle="collapse"] {
    position: relative;
}

.dropdown-toggle::after {
    display: block;
    position: absolute;
    top: 50%;
    right: 20px;
    transform: translateY(-50%);
}

ul ul a {
    font-size: 0.9em !important;
    padding-left: 30px !important;
    background: #c60429;
}

ul.CTAs {
    padding: 20px;
}

ul.CTAs a {
    text-align: center;
    font-size: 0.9em !important;
    display: block;
    border-radius: 5px;
    margin-bottom: 5px;
}

a.download {
    background: #fff;
    color: #c60000;
}

a.article,
a.article:hover {
    background: #c60429 !important;
    color: #fff !important;
}

/* ---------------------------------------------------
    CONTENT STYLE
----------------------------------------------------- */

#content {
    width: 100%;
    padding: 20px;
    min-height: 100vh;
    transition: all 0.3s;
}

/* ---------------------------------------------------
    MEDIAQUERIES
----------------------------------------------------- */

@media (max-width: 768px) {
    #sidebar {
        min-width: 130px;
        max-width: 130px;
        text-align: center;
        margin-left: -130px !important;
    }
    .dropdown-toggle::after {
        top: auto;
        bottom: 10px;
        right: 50%;
        -webkit-transform: translateX(50%);
        -ms-transform: translateX(50%);
        transform: translateX(50%);
    }
    #sidebar.active {
        margin-left: 0 !important;
    }
    #sidebar .sidebar-header h3,
    #sidebar .CTAs {
        display: none;
    }
    #sidebar .sidebar-header strong {
        display: block;
    }
    #sidebar ul li a {
        padding: 20px 10px;
    }
    #sidebar ul li a span {
        font-size: 0.85em;
    }
    #sidebar ul li a i {
        margin-right: 0;
        display: block;
    }
    #sidebar ul ul a {
        padding: 10px !important;
    }
    #sidebar ul li a i {
        font-size: 1.3em;
    }
    #sidebar {
        margin-left: 0;
    }
    #sidebarCollapse span {
        display: none;
    }
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<nav id="sidebar">
            <div class="sidebar-header ">
                <h3><img src="/logo2.png" class="img-fluid flex-center"></h3>  
                <strong><img src="/logo1.png" class="img-fluid flex-center"></strong>
                
            </div>
            <div class="sidebar-header1">
            </div>
            <ul class="list-unstyled components">
                <li class ="active">
                    <a href="/" >
                        <i class="fas fa-home"></i>
                       <icon>Home</icon>
                    </a>
                </li>
                <li>
                    <a href="#">
                        <i class="fas fa-building"></i>
                        <icon>Organizations</icon>
                    </a>
                </li>     
                
                <li>
                    <a href="#">
                        <i class="fas fa-chart-pie"></i>
                        <icon>Reports</icon>
                    </a>
                </li>
            </ul>
        </nav>
        
        <button type="button" id="sidebarCollapse" class="btn btn-info">
                        <i class="fas fa-align-left"></i>
                        
                    </button>

最佳答案

使用

         $('#sidebar ul li').on('click', function () {
             $('#sidebar ul .active').removeClass('active');
            $(this).addClass('active');
        });

查看片段:

$(document).ready(function () {
            $('#sidebarCollapse').on('click', function () {
                $('#sidebar').toggleClass('active');
            });
             $('#sidebar ul li').on('click', function () {
                 $('#sidebar ul .active').removeClass('active');
                $(this).addClass('active');
            });
        });
.wrapper {
    display: flex;
    align-items: stretch;
}

#sidebar {
    min-width: 250px;
    max-width: 250px;
    background: #dde4e8;
    color: #000;
    transition: all 0.3s;
}

#sidebar.active {
    min-width: 100px;
    max-width: 100px;
    text-align: center;
}

#sidebar.active .sidebar-header h3,
#sidebar.active .CTAs {
    display: none;
}

#sidebar.active .sidebar-header strong {
    display: block;
}

#sidebar ul li a {
    text-align: left;
}


#sidebar.active ul li a {
    padding: 20px 10px;
    text-align: center;
    font-size: 0.85em;
}

#sidebar.active ul li a icon{
    display:none;
}

#sidebar.active ul li a i {
    margin-right: 0;
    display: block;
    font-size: 1.8em;
    margin-bottom: 5px;
}

#sidebar.active ul ul a {
    padding: 10px !important;
}

#sidebar.active .dropdown-toggle::after {
    top: auto;
    bottom: 10px;
    right: 50%;
    -webkit-transform: translateX(50%);
    -ms-transform: translateX(50%);
    transform: translateX(50%);
}

#sidebar .sidebar-header {
    padding: 24px;
    background: #dde4e8;
    border-bottom: 1px solid #c60429 ;
}

#sidebar .sidebar-header1{
    padding: 20px;
    background: #dde4e8;
}

#sidebar .sidebar-header strong {
    display: none;
    font-size: 1.8em;
}

#sidebar ul.components {
    padding: 20px 0;
    border-bottom: 1px solid #c60429 ;
}

#sidebar ul li a {
    padding: 10px;
    font-size: 1.1em;
    display: block;
}

#sidebar ul li a:hover {
    color: #c60429 ;
    background: #fff;
}

#sidebar ul li a i {
    margin-right: 10px;
}

#sidebar ul li.active>a,
a[aria-expanded="true"] {
    color: #fff;
    background: #c60429;
}

a[data-toggle="collapse"] {
    position: relative;
}

.dropdown-toggle::after {
    display: block;
    position: absolute;
    top: 50%;
    right: 20px;
    transform: translateY(-50%);
}

ul ul a {
    font-size: 0.9em !important;
    padding-left: 30px !important;
    background: #c60429;
}

ul.CTAs {
    padding: 20px;
}

ul.CTAs a {
    text-align: center;
    font-size: 0.9em !important;
    display: block;
    border-radius: 5px;
    margin-bottom: 5px;
}

a.download {
    background: #fff;
    color: #c60000;
}

a.article,
a.article:hover {
    background: #c60429 !important;
    color: #fff !important;
}

/* ---------------------------------------------------
    CONTENT STYLE
----------------------------------------------------- */

#content {
    width: 100%;
    padding: 20px;
    min-height: 100vh;
    transition: all 0.3s;
}

/* ---------------------------------------------------
    MEDIAQUERIES
----------------------------------------------------- */

@media (max-width: 768px) {
    #sidebar {
        min-width: 130px;
        max-width: 130px;
        text-align: center;
        margin-left: -130px !important;
    }
    .dropdown-toggle::after {
        top: auto;
        bottom: 10px;
        right: 50%;
        -webkit-transform: translateX(50%);
        -ms-transform: translateX(50%);
        transform: translateX(50%);
    }
    #sidebar.active {
        margin-left: 0 !important;
    }
    #sidebar .sidebar-header h3,
    #sidebar .CTAs {
        display: none;
    }
    #sidebar .sidebar-header strong {
        display: block;
    }
    #sidebar ul li a {
        padding: 20px 10px;
    }
    #sidebar ul li a span {
        font-size: 0.85em;
    }
    #sidebar ul li a i {
        margin-right: 0;
        display: block;
    }
    #sidebar ul ul a {
        padding: 10px !important;
    }
    #sidebar ul li a i {
        font-size: 1.3em;
    }
    #sidebar {
        margin-left: 0;
    }
    #sidebarCollapse span {
        display: none;
    }
}
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.0/umd/popper.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js"></script>
<nav id="sidebar">
            <div class="sidebar-header ">
                <h3><img src="/logo2.png" class="img-fluid flex-center"></h3>  
                <strong><img src="/logo1.png" class="img-fluid flex-center"></strong>
                
            </div>
            <div class="sidebar-header1">
            </div>
            <ul class="list-unstyled components">
                <li class ="active">
                    <a href="/" >
                        <i class="fas fa-home"></i>
                       <icon>Home</icon>
                    </a>
                </li>
                <li>
                    <a href="#">
                        <i class="fas fa-building"></i>
                        <icon>Organizations</icon>
                    </a>
                </li>     
                
                <li>
                    <a href="#">
                        <i class="fas fa-chart-pie"></i>
                        <icon>Reports</icon>
                    </a>
                </li>
            </ul>
        </nav>
        
        <button type="button" id="sidebarCollapse" class="btn btn-info">
                        <i class="fas fa-align-left"></i>
                        
                    </button>

关于javascript - 如何在 Bootstrap 可折叠 sidenav 中添加事件类 onclick,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51184117/

相关文章:

html - 使 columnHeader 与 css 列一样宽

html - 为什么我的 CSS "height: 100%"侧边栏元素实际上没有扩展到 100%?

javascript - 使用后退按钮时如何防止 Safari ios 移动缓存?

java - 使用 GWT 从 URL 下载数据

javascript - Application.js 没有被处理成最终 View

html - 水平居中一个宽度和高度是绝对值的 <div>

javascript - 将变量从 Javascript 移动到 HTML 并保存变量,以便它们可以在其他函数中使用

html - 尝试制作我在 CSS 中完成但失败的代码的滑入动画

javascript - 移动时可选择的单选按钮

javascript - 编辑 bootstrap-table 中的行