2011-01-26 108 views
0

我有一個菜單和幾乎每個項目都有一個子菜單。菜單系統是這樣構造的向無序列表中的每個錨點添加一個類

<div id="leftNav"> 
    <ul class="level1"> 
     <li><a href="#">Link1</a> 
      <ul class="level2" id="submenu01"> 
       <li class="deptName"><a href="#">Link1</a></li> 
       <li><a href="#">Link1.1</a></li> 
       <li><a href="#">Link1.2</a></li> 
       <li><a href="#">Link1.3</a></li> 
      </ul> 
     </li> 
     <li><a href="#">Link2</a> 
      <ul class="level2" id="submenu02"> 
       <li class="deptName"><a href="#">Link2</a></li> 
       <li><a href="#">Link2.1</a></li> 
       <li><a href="#">Link2.2</a></li> 
       <li><a href="#">Link2.3</a></li> 
      </ul> 
     </li> 
    </ul> 
</div> 

其中.level2是子菜單。我需要爲子菜單中的每個錨點添加一個類,除了deptName類中的錨點。這很容易,但是,我需要這個類是「levelTwoLinkXX」,其中「XX」是第一個01,第二個是02,依此類推。然後,這需要爲每個level2開始,而不是在deptName類中的第一個鏈接從levelTwoLink01開始。

我想出了JavaScript是:

$(function(){ 
    $('.level2 > li:not('.deptName') > a').each(function(){ 
     $(this).addClass('levelTwoLink0' + (index+1)); 
    }); 
}); 

的問題是,它開始於01及的時候它的類分配給#submenu02該指數處於4我將如何去獲取它重新啓動每個新的子菜單XX?

回答

1
$('ul.level2').each(function() { 
    $(this).find('li').not('.deptName').each(function(i) { 
     $(this).find('a').addClass('levelTwoLink0' + (i+1)); 
    }); 
}); 

演示http://www.jsfiddle.net/DAunT/3/

+0

它仍然不會重新開始計數當它到達level2類的下一個ul – heymrcarter 2011-01-26 16:33:56

0

你jQuery的表達是不正確。在添加deptName類選擇器時,您正在關閉jQuery字符串。

另外各自函數可以採用一個參數來表示DOM中當前元素的索引。那麼正確的代碼應該是:

$('ul.level2').each(function() { 
    $(this).find('li:not(.deptName) a').each(function(index){ 
     $(this).addClass('levelTwoLink0' + (index + 1)); 
    }); 
}); 

你需要做的就是通過level2的首先第一個循環,然後通過每個內。

http://api.jquery.com/each/

0

這樣的事情?

$("li ul").each(function(i, e) { 
    $("li:not('.deptName') a", this).addClass("levelTwoLink" + this.id.replace(/\D*/,'')); 
}); 
相關問題