2013-02-02 28 views
0

我有一個HTML結構如下所示:反向樹掃描,它是否可行?

<ul id="mainMenu"> 
    <li class="itm_1"> 
     Text... 
    </li> 
    <li class="itm_2"> 
     Text... 
     <ul> 
      <li class="itm_3"> 
       Text... 
       <ul> 
        <li class="itm_4"> 
         Text... 
        </li> 
        <li class="itm_5"> 
         Text... 
        </li> 
       </ul> 
      </li> 
      <li class="itm_6"> 
       Text... 
      </li> 
     </ul> 
    </li> 
</ul> 

我喜歡做什麼,是一類添加到有源元件,然後在任何其他元件在相同的路徑增加另一個類等的例子波紋管:

<ul id="mainMenu"> 
    <li class="itm_1"> 
     Text... 
    </li> 
    <li class="itm_2 ANCESTOR_ACTIVE"> 
     Text... 
     <ul> 
      <li class="itm_3 ANCESTOR_ACTIVE"> 
       Text... 
       <ul> 
        <li class="itm_4"> 
         Text... 
        </li> 
        <li class="itm_5 ACTIVE"> 
         Text... 
        </li> 
       </ul> 
      </li> 
      <li class="itm_6"> 
       Text... 
      </li> 
     </ul> 
    </li> 
</ul> 

,將被視爲積極的我能找到它,並添加類的活動狀態,但我找不到添加ancestor_active類的有源元件上方的元素在同一路徑方式的元素。

現在在我的劇本,我有以下代碼:

<?php 
    $current_page = $page_id; // Lets say is 5 
?> 
<script type="text/javascript"> 
    var cp = { 
     p : <?php echo $current_page; ?> 
    }; 

    jQuery(document).ready(
     function($) 
     { 
      $('.itm_' + cp.p).addClass('active'); 
     } 
    ); 
</script> 

注意:嵌套數組並不總是與相同的深度。在某些情況下,還有其他更多的嵌套列表,並且在其他情況下,沒有子列表 如何爬到頂層元素#mainMenu並將類「ancestor_active」添加到使用jQuery的同一路徑中的每個li元素?

回答

3

使用parents()查找樹,所有匹配

$('#mainMenu li').click(function(){ 
    $('#mainMenu li.active').removeClass('active'); 
    $(this).addClass('active').parents('li').addClass('active'); 
}); 

API參考http://api.jquery.com/parents/

+0

這是coooool :)非常感謝@charlietfl –

1

可以使用parent功能,我想

編輯一個小例子

<script type="text/javascript"> 
    var cp = { 
     p : 4 
    }; 
    jQuery(document).ready(
     function($) { 
      var c = $('.itm_' + cp.p) 
     c.addClass('active') 
     set_ancestor_active(c.parent()) 
     } 
    ); 
function set_ancestor_active(c) { 
    while (c.is('li') || c.is('ul')) { 
    if (c.is('li')) 
     c.addClass('ancestor_active') 
    c = c.parent() 
    } 
} 
</script> 
+0

你能舉個例子嗎?多少個循環?這是一種好方法,不要無故花費記憶? –

+1

如果你可以稍微等一下,因爲測試需要一些時間,我會試試你的結構。 – CapelliC

+0

你是最棒的! :) –