2017-01-27 8 views
2

以下のようなHTMLコードブロックがあります。このコードを使用してjQueryクラスの追加と削除、ネストされたリストに別のクラスがある場合のCSS

<ul>  
    <li class="level_1 has_sub no_active"> 
    <a href="">Window Rolling</a> 
    <ul class="level_2 has_sub no_active"> 
     <li class="level_2 no_sub no_active"><a href="">T52</a></li> 
     <li class="level_2 no_sub no_active"><a href="">T30</a></li> 
     <li class="level_2 no_sub no_active"><a href="">T57</a></li> 
     <li class="level_2 no_sub no_active"><a href="">T39</a></li> 
     <li class="level_2 no_sub no_active"><a href="">TE26</a></li> 
    </ul> 
    </li> 

    <li class="level_1 has_sub no_active"> 
    <a href="">Insulated And Extruded</a> 
    <ul class="level_2 has_sub no_active"> 
     <li class="level_2 no_sub no_active"><a href="">TE77</a></li> 
     <li class="level_2 no_sub no_active"><a href="">TE78</a></li> 
     <li class="level_2 no_sub no_active"><a href="">T77</a></li> 
     <li class="level_2 no_sub no_active"><a href="">TS77</a></li> 
    </ul> 
    </li> 

    <li class="level_1 no_sub no_active"><a href="">Grille Type Rolling</a></li> 
    <li class="level_1 no_sub no_active"><a href="">PVC High Speed Doors</a></li> 
    <li class="level_1 no_sub no_active"><a href="">Swinging doors</a></li> 
</ul> 

、私はul ul liactive2という名前のクラスを持って確認する必要があります。そのクラスは、私は以下のようにその親要素にクラスを追加したいが存在する場合:

ul > li.active1 
ul ul.active1 and display: block; 

例:

<li class="level_1 has_sub active1"> 
    <a href="">Insulated And Extruded</a> 
    <ul class="level_2 has_sub active1" style="display: block;"> 
     <li class="level_2 no_sub active2"><a href="">TE77</a></li> 
     <li class="level_2 no_sub no_active"><a href="">TE78</a></li> 
     <li class="level_2 no_sub no_active"><a href="">T77</a></li> 
     <li class="level_2 no_sub no_active"><a href="">TS77</a></li> 
    </ul> 
    </li> 

私は以下のようにjqueryを使用して、それを試してみました。しかし、クラスとCSSはすべてliulに追加されます。

if ($('ul li ul li').hasClass('active2')) { 
    $('ul li') 
    .removeClass('no_active') 
    .addClass("active1"); 

    $('ul li ul') 
    .removeClass('no_active') 
    .addClass("active1") 
    .css("display","block"); 
} 

誰でもこの問題を解決する方法を教えていただけますか?

ありがとうございます。

+0

つもりな作業であればノー確認を使用するが、これを試すことができます: '場合(「。active2 '$()の長さ。)'や '($(' active2' 。)であれば[0] .length) '最初に長さ関数がないと言う場合 – sTx

+0

どのようにこれらのクラスを追加していますか?no_activeとactive2を同時に持つことができます – guradio

答えて

3

あなたはfilter

var removeClass = 'no_active', 
    addClass = 'active1'; 
$('ul ul li') 
    .filter(function() { 
     return $(this).hasClass('level_2'); 
    }) 
    .parent() 
    .removeClass(removeClass) 
    .addClass(addClass) 
    .parent() 
    .removeClass(removeClass) 
    .addClass(addClass); 
+0

Rechardありがとうございます。それは親 'li'にのみ追加されています。親クラス 'ul'に対しても同じクラスとCSSを追加する方法を教えてください。 – user3733831

+0

私は答えを更新しました。あなたのコードは間違いなく最適化されています。 – Richard

+0

ありがとうございます。あなたはそれがうまくいかず、最適化する理由を説明できますか? – user3733831

関連する問題