2012-02-04 14 views
2

我覺得這應該是一件容易的事,但我有問題。我有一個下拉菜單包裝在一個無序列表(由asp.net菜單控件生成),我試圖通過jquery添加額外的高亮顯示到選定的鏈接的父鏈接。下面是生成的HTML:jQuery的遍歷一個asp.net菜單

<div id="MainMenu" class="mainMenuControl"> 
     <ul class="level1 static" role="menubar"> 
      <li class="static" role="menuitem"><a class="level1 static selected" href="/default.aspx">Home</a> 
      </li> 
      <li class="has-popup static" aria-haspopup="MainMenu:submenu:3" role="menuitem"><a 
       class="level2 static" href="/store/prodcut.aspx">Product 1</a> 
       <ul id="MainMenu:submenu:3" class="level3 dynamic"> 
        <li class="dynamic" role="menuitem"><a class="level3 dynamic" href="/store/product/category1.aspx"> 
         Category 1</a> </li> 
        <li class="dynamic" role="menuitem"><a class="level3 dynamic" href="/store/product/category2.aspx"> 
         Category 2</a> </li> 
       </ul> 
      </li> 
      <li class="has-popup static" aria-haspopup="MainMenu:submenu:10" role="menuitem"><a 
       class="level2 static" href="/store/paymentoptions.aspx">Ministries</a> 
       <ul id="MainMenu:submenu:10" class="level3 dynamic"> 
        <li class="dynamic" role="menuitem"><a class="level3 dynamic" href="/store/paymentoptions/option1.aspx"> 
         Option 1</a> </li> 
        <li class="dynamic" role="menuitem"><a class="level3 dynamic" href="/store/paymentoptions/option2.aspx"> 
         Option 2</a> </li> 
       </ul> 
      </li> 
     </ul> 
    </div> 

所以,無論頁面當前用戶是,相應的菜單鏈接將有類的選擇。「但是,如果它們位於其中一個主菜單選項的子頁面上,我希望下拉菜單中的鏈接以及它們的父鏈接都具有「選定」類。

我試圖添加類到基於父/子url路徑的鏈接,但我遇到了問題,因爲我在asp.net中使用url重寫,以便任何結尾的斜槓,默認文檔(index.html, default.aspx)或網址結尾(.html,.aspx等)被刪除。

我想這一點,但是,正如我所說,我無法得到它的工作:

$('.mainMenuControl ul a').each(function() { 
      if ($(this).attr('href') == window.location.pathname) { 
       $(this).addClass('selected'); 
       if ($(this).parent('li').parents('.mainMenuControl ul.level1 li').length) { 
        $(this).parent('li').parents('.mainMenuControl ul.level1 li').find('a.static').addClass('selected'); 
       } 
      } 
     }); 

任何建議,將不勝感激,謝謝!

回答

0

爲什麼在jQuery中。如果您使用母版頁,您可以創建一個名爲lblMenu的標籤。

所以像...

<div id="MainMenu" class="mainMenuControl"> 
    <asp:labelControl text = ""/> 
</div> 

然後創建一個接受你想要選擇的項目的名稱都不會的類。 在此課程中爲您的菜單構建HTML,並且傳遞給它的選項將根據它們進行選擇。

public string BuildMenu(string selected1, string Selected2) 
StringBuilder sbMenu = new StringBuilder(); 

sbMenu.Append("<ul class="level1 static" role="menubar">"); 
sbMenu.Append ....... 

return sbMenu.ToString().replace(selected1, selected2); 

在你的內容的Page_Load事件裝上去一樣..

lblMenu.Text = className("<a class=""level1 static""","<a class="level1 static selected"");