jquery 如果 hasclass 不起作用

标签 jquery css

如果嵌套的 ul 的父级 li 有事件类,我想显示它。 li 的 Active 类已通过 jquery 动态应用。这是我的侧面导航

        <div class="sidebar-collapse">
            <ul class="nav" id="main-menu">

                <li>
                    <a href="dashboard.php"><i class="fa fa-dashboard"></i> Dashboard</a>
                </li>
                <li>
                    <a href="ui-elements.html"><i class="fa fa-desktop"></i> UI Elements</a>
                </li>
                <li>
                    <a href="chart.html"><i class="fa fa-bar-chart-o"></i> Charts</a>
                </li>
                <li>
                    <a href="tab-panel.html"><i class="fa fa-qrcode"></i> Tabs & Panels</a>
                </li>

                <li>
                    <a href="table.html"><i class="fa fa-table"></i> Responsive Tables</a>
                </li>
                <li>
                    <a href="form.php"><i class="fa fa-edit"></i> Forms </a>
                </li>


                <li>
                    <a href="class.php"><i class="fa fa-sitemap"></i> Class<span class="fa arrow"></span></a>
                    <ul class="nav nav-second-level">
                        <li>
                            <a href="class.php">Class</a>
                        </li>
                        <li>
                            <a href="Section.php">Section</a>
                        </li>
                    </ul>
                </li>
                <li>
                    <a href="empty.html"><i class="fa fa-fw fa-file"></i> Empty Page</a>
                </li>
            </ul>

        </div>

如果单击此 li,我已为每个 li 设置了事件类。

$('.sidebar-collapse ul li').each(function(){
    if(window.location.href.indexOf($(this).find('a:first').attr('href'))>-1){
            $(this).addClass('active-menu');
            $(this).parents('li').addClass("active-menu").siblings().removeClass('active-menu'); 
        }
    });

现在我想显示任何 li 的嵌套 ul(如果它有嵌套 ul)。所以我应用了hasClass。它在警报情况下有效,但将 css 添加到嵌套 ul 不起作用。我使用 chld、next、closest 进行了测试,但不起作用。有什么想法吗?

if($(".sidebar-collapse ul li").hasClass('active-menu')){
    $(this).find('.nav-second-level').css('display','block');
 }  

最佳答案

您必须使用.each(),因为您在没有上下文的情况下使用this,每个元素都会遍历所有元素并为每个元素提供上下文。

查看以下代码片段。

$(".sidebar-collapse ul li").each(function() {
  if ($(this).hasClass('active-menu')) {
    $(this).parent(".nav-second-level").show();
  }
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<li class="sidebar-collapse">
  <a href="class.php">
    <i class="fa fa-sitemap"></i> Class<span class="fa arrow"></span> </a>
  <ul class="nav nav-second-level" style="display:none">
    <li class="active-menu">
      <a href="class.php">Class</a>
    </li>
    <li>
      <a href="Section.php">Section</a>
    </li>
  </ul>
</li>

关于jquery 如果 hasclass 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49912613/

相关文章:

javascript - 如何在 iPhone 浏览器上捕获键盘 "Return"事件?

javascript - 在 DataTables aaData 中发送 JSON 对象而不是数组

javascript - 如何在 C# 中单击带有 Selenium 的 JS 链接

css - 将共享的 sass 变量导入每个 vue 组件是一种好习惯吗?

forms - 框阴影出现在表格下方

jquery - 动态分配CSS类到网站菜单栏struts2

javascript - jQuery ajax,附加数据有效但数据对另一端(计算机/用户)可见吗?

Javascript 滚动不会停止

css - 不同的容器高度

jquery - 如何根据浏览器/屏幕的宽度更改 'background-position'