2016-03-09 91 views
2

我无法在if-else条件中使用jQuery toggleClass()。jQuery toggleClass if else not working

我的HTML代码:

<ul> 
    <li class="firstLevel"> 
    <a href="#main_cat_01">MAIN CATEGORY #1</a> 
    <ul class="dijete"> 
     <li> 
      <a href="#subt_cat_01">SUB CATEGORY #1</a> 
     </li> 
    </ul> 
    </li> 
    <li class="firstLevel"> 
    <a href="#main_cat_02">MAIN CATEGORY #2</a> 
    <ul class="dijete"> 
     <li> 
      <a href="#subt_cat_02_01">SUB CATEGORY #1</a> 
     </li> 
    </ul> 
    </li> 
</ul> 

我的CSS代码是:

ul.dijete { 
    display: none; 
} 

.vidimte{ 
    display: block; 
} 

我的JavaScript代码是:

var $j = jQuery.noConflict(); 
    $j(function() { 
     $j('li.firstLevel').click(function(){ 
      if($j(this).children("ul.dijete").hasClass("vidimte")){ 
       $j(this).children("ul.dijete").toggleClass('vidimte'); //visible 
       $j(this).find("ul.dijete").prev("li.firstLevel a").css({ 
        "background-image":'url(URL_TO_THE_IMAGE_OPEN)', 
        "background-position":"right center", 
        "display":"block", 
        "background-repeat":"no-repeat" 
       }); 
      }else{ // else add image close and display none 
       $j(this).find('ul.vidimte').prev("li.firstLevel a").css({ 
        "background-image":'url(URL_TO_THE_IMAGE_CLOSE)', 
        "background-position":"right center", 
        "display":"block", 
        "background-repeat":"no-repeat" 
       }); 
      } 
     }); 
    }); 

我不能得到这个工作。

我必须使用。('click)方法吗?

任何想法?

感谢您的帮助或任何信息!

+0

看起来像[CSS特异性](https://developer.mozilla.org/en-US/docs/Web/CSS/Specificity),'ul.dijete'比' .vidimte',所以添加类什么也不做。一种解决方案是切换两个 - >'..toggleClass('vidimte dijete')' – adeneo

+0

为什么你使用toggleClass()而不是removeClass(),因为你在一个if中调用它来检查类是否已经存在?另外,你的if删除了这个类,但是你的其他东西不会添加它。 – nnnnnn

回答

0

Got it!感谢分享想法!

解决方案为我工作:

var $j = jQuery.noConflict(); 

$j(function() { 
    $j('li.firstLevel').on('click', function() { 
     if($j(this).closest("li").children("ul.dijete").length){ 
      $j(this).children("ul.dijete").toggleClass('vidimte'); 


      if($j(this).children("ul.dijete").hasClass("vidimte")){ 
       $j(this).find("ul.dijete").prev("li.firstLevel a").css({ 
        "background-image":'url(http://www.v-tac.hr/wp-content/themes/vtac/images/stories/customfilters/open.png)', 
        "background-position":"right center", 
        "display":"block", 
        "background-repeat":"no-repeat" 
       }); 
      }else{ 
       $j(this).find('ul.dijete').prev("li.firstLevel a").css({ 
        "background-image":'url(http://www.v-tac.hr/wp-content/themes/vtac/images/stories/customfilters/closed.png)', 
        "background-position":"right center", 
        "display":"block", 
        "background-repeat":"no-repeat" 
       }); 
      } 
     } 
    }); 
    }); 
1

.toggleClass()函数用来删除或添加班组长,也就是在你else表达你没有删除或添加的类别回你的问题说。 加$j(this).children(".dijete").toggleClass('vidimte')else 但我认为你的目标是点击链接,然后显示/隐藏子链接也改变背景。然后代码链接这些: $j(this).children('ul').toggleClass('dijete vidimte')