【问题标题】:Remove Class if .dropdown does not have .active -- jQuery如果 .dropdown 没有 .active 则删除类 - jQuery
【发布时间】:2014-08-02 05:56:56
【问题描述】:

这是较大视口上的水平菜单,当您单击下拉菜单时,菜单会展开并且列表是内联的。附加了一个跨度以在父级别下的条带中显示列表。一切都很好,除了一件事,因为我的 jQuery 技能相当糟糕。

问题是如何使用这个 jQuery(使用这个 jQuery)并且只在 .navbar-nav li.dropdown 没有 .active 类但它的情况下从 html 中删除 .menu-open 类还必须在这里使用现有的东西,以便当用户在类外部单击时,当它没有类 .active 时,它​​会被删除,依此类推。请参阅下面的 Bin 链接。

这是我目前的演示:http://jsbin.com/micugu/1/

了解我的意思的最好方法是访问上面的这个链接,点击导航栏外的页面,你会看到(如果你的页面足够宽)我试图阻止的行为。

http://jsbin.com/micugu/1/edit

$(document).on('click touchstart', function (a) {      
        if ($(a.target).parents().index($('.navbar-nav')) == -1){
               $('html').removeClass('menu-open');
        }      
});

还有这个:

$('.dropdown-toggle').click(function () {       
  if (!$(this).parent().hasClass('open')) {      
        $('html').addClass('menu-open');          
  } else {        
     $('html').removeClass('menu-open');      
  }        
});

【问题讨论】:

    标签: jquery twitter-bootstrap-3


    【解决方案1】:

    我希望这就是你要找的东西

    Edited --> JSfiddle link

    Edited link to full screen result

    这是我用来获得结果的代码。

    $("li").click(function(e){  
         $("li[class *='active']").each(function(){
         $(this).removeClass('active');    
         });
    
        if(!$(this).hasClass('dropdown'))
        {
           $('html').removeClass('menu-open');
        }
        $(this).addClass('active');
        if ($(a.target).parents().index($('.navbar-nav')) == -1){
             $('html').removeClass('menu-open');
        }
     });
    

    【讨论】:

    • 感谢您的尝试。它的工作方式与以前相同。
    • 嗨 .. 在我的 jsFiddle 中,菜单打开仅适用于处于活动状态的下拉菜单,对于其他菜单,它已被删除。我认为这就是您要找的。​​span>
    • 删除了无效链接。
    • 谢谢。我要防止的是点击页面时栏消失,请在非常宽的屏幕上查看您的或我的。
    • 就是这样!非常感谢!
    【解决方案2】:

    这就是你要找的吗? http://jsbin.com/yuloqebe/1/edit?html,js,output

    if (!$(".nav-bg").hasClass('active')){
        $('html').removeClass('menu-open');
    }
    

    基本上如果 hasClass 返回 false 我们将删除菜单打开类

    【讨论】:

    • 我更新了这个问题,所以它更清楚了。问题是如何使用这个 jQuery(有问题)并且仅在 .navbar-nav li.dropdown 没有 .active 类的情况下从 html 中删除 .menu-open 类。
    • 这就是它的作用。 hasClass 返回 false。这 ”!”在开头将使语句等于 true
    • 我可以看到 .active 类仍然坚持第一个下拉列表和 .open 类代码,影响到 .menu-open 类的删除和添加...我认为它相互冲突。 ..也正如乔纳森所说,这是正确的方式......
    • 是的,它被淘汰了。我会更多地摆弄它,我已经走得太远了,我的大脑无法处理它。
    【解决方案3】:

    不确定我明白了,你可以试试这样:

        if(!$('.dropdown.navbar-nav').hasClass('active')){
              $('.menu-open').removeClass('menu-open'); // will remove menu-open  class
            }
    

    【讨论】:

    • 问题是如何使用这个 jQuery 并且仅在 .navbar-nav li.dropdown 没有 .active 类的情况下从 html 中删除 .menu-open 类。
    • 和......答案如何告诉你有什么不同。请提及。
    • 它还必须保留当前脚本,如果在外部单击它会删除它,它不是 navbar-nav 它是 navbar-nav 下拉菜单。不过谢谢
    • 它在任何使用它的地方删除菜单打开类..只是类..只有 navbar-nav 有活动类..
    • 这与回购无关...抱歉帮不上忙 :(
    猜你喜欢
    • 2020-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-13
    • 1970-01-01
    • 1970-01-01
    • 2018-05-21
    • 1970-01-01
    相关资源
    最近更新 更多