我添加到我的元素的类正在添加,但删除后不会被删除

时间:2016-07-21 14:17:09

标签: javascript jquery html css twitter-bootstrap-3

好的,我的导航栏HTML就在这里(我使用的是boostrap Nav)

<header>
 <nav class="navbar navbar-default navbar-fixed-top" role="navigation" id="MyNav">
   <div class="container">
    <div class="navbar-header">
     <button type="button" class="navbar-toggle collapsed" data- toggle="collapse" data-target="#collapse" aria-expanded="false">
     <span class="sr-only">Toggle navigation</span>
     <span class="icon-bar"></span>
     <span class="icon-bar"></span>
     <span class="icon-bar"></span>
     </button>
     <a class="navbar-brand" href="#featured"><h1>Wisdom <span class="subhead">Pet Medicine</span></h1></a>
  </div>
  <div class="collapse navbar-collapse" id="collapse">
      <ul  class="nav navbar-nav navbar-right" id="collapse">
          <li class="active"><a href="#featured">Home</a></li>
          <li><a href="#mission">Mission</a></li>
          <li><a href="#services">Services</a></li>
          <li><a href="#staff">Staff</a></li>
          <li><a href="#testimonials">Testimonials</a></li>
      </ul>
   </div>      
  </div>    
 </nav>
</header>

javascript(JQuery)代码就在这里,

$('.navbar-fixed-top').on('activate.bs.scrollspy',function(){    
    var current= $(this).find('#MyNav li .active a').attr('href');
    if(current !== '#featured'){
        $('header nav').addClass('inbody');
    }
    else{
        $('header nav').removeClass('inbody');
    }    
});

现在,问题在于,每当我向下滚动到某个部分时,ACTIVE类都会更改为其他li标记,因此inbody类会附加到<nav>元素,遵循IFCondition。但是当我向后滚动时,inbody类没有按照ELSE条件被删除。需要帮助。

3 个答案:

答案 0 :(得分:0)

this.fillSelectors('form#view:_id1', { casper.then(function(){ this.fillSelector('Formname ????', { 'username': 'Hans', 'password': 'Wurst' }, true); });

的选择器中有一个额外的空格

变化:

li.active

var current= $(this).find('#MyNav li .active a').attr('href');
                                    ^^ // extra space

您的版本会在var current= $(this).find('#MyNav li.active a').attr('href'); 内查找具有该类

<li>内的有效课程

答案 1 :(得分:0)

@charlietfl所说的是正确的。但是,更好的解决方案可能是使用事件目标:

$('.navbar-fixed-top').on('activate.bs.scrollspy',function(ev){
    var current = $(ev.target).find('a').attr('href');
    ...
});

答案 2 :(得分:0)

这行代码存在两个问题:

var current= $(this).find('#MyNav li .active a').attr('href');

您的初始选择$(this)将是您的nav元素。然后使用.find()搜索nav元素的所有后代。 #MyNav不是后代(它是相同的元素)所以find函数不会返回任何内容。

第二个问题是&#34; li .active&#34;它将查找具有作为li元素后代的活动类的元素。但是你想要具有类&#34;活跃&#34;的li元素。为了得到它,不要在它们之间包含空格。

该行应如下所示:

var current= $(this).find('li.active a').attr('href');