2014-06-26 144 views
0
$('#sidebar ul li ul li').click(function() { 
     var ids = $(this).attr('id'); 
     $('#ids').addClass('active'); 
     $('#ids').parent('ul').parent('li').addClass('has-sub active'); 
     alert(ids); // Will alert the id if the element has one  
    }); 

我不明白爲什麼這不起作用。 alert給我li元素的ID,但面前的2線不工作,我的意思是這兩個:jquery id選擇更改類

$('#ids').addClass('active'); 
$('#ids').parent('ul').parent('li').addClass('has-sub active'); 

問題出在哪裏?我錯過了什麼嗎?

enter image description here

+4

''#ids''是字面上的字符串'#ids'。它與你的變量沒有關係。你爲什麼試圖從元素的'id'屬性中構造一個選擇器?那個選擇器不會再次匹配'this'元素嗎?或者你是否存儲了你不應該在'id'屬性中的東西? – Blender

回答

0

@IshanJain @RoryMcCrossan @ j08691 @EliantenHolder謝謝你的迴應。 Jquery沒有幫助解決這個問題,但這個幫手工作。

public static class HtmlHelperExtensions 
{ 

    public static string ActivePage(this HtmlHelper htmlHelper,string controller, string action) 
    { 
     string _classValue=""; 

     string _currentController = htmlHelper.ViewContext.Controller.ValueProvider.GetValue("controller").RawValue.ToString(); 

     string _currentAction = htmlHelper.ViewContext.Controller.ValueProvider.GetValue("action").RawValue.ToString(); 

     if (_currentController == controller && _currentAction == action) 
     { 
      _classValue = "active"; 
     } 
     else if (_currentController == controller && action.Equals("")) 
     { 
      _classValue = "has-sub active"; 
     } 
     else 
     { 
      if (action.Equals("")) 
      { 
       _classValue = "has-sub"; 
      } 
     } 

     return _classValue; 
    } 
} 

,這是從我的佈局頁

<li class="@Html.ActivePage("Order","")"> 
       <a href="javascript:;" class=""> 
        <span class="icon-box"> <i class="icon-dashboard"></i></span> Sipariş Açma 

        <span class="arrow"></span> 
       </a> 
       <ul class="sub"> 
        <li class="@Html.ActivePage("Order","Index")"><a class="" href="@Url.Action("Index","Order")">Sipariş</a></li> 
        <li class="@Html.ActivePage("Order","orderProduct")"><a class="" href="@Url.Action("orderProduct","Order")">Ürün Sipariş</a></li> 
        <li class="@Html.ActivePage("Order","orderCloth")"><a class="" href="@Url.Action("orderCloth","Order")">Kumaş Sipariş</a></li> 
        <li class="@Html.ActivePage("Order","orderAccessory")"><a class="" href="@Url.Action("orderAccessory","Order")">Aksesuar Sipariş</a></li> 
       </ul> 
      </li> 
5

你需要連接你的變量,如:

$('#' + ids). 

$('#ids')正在尋找與ids的ID的元素。正如Blender在評論中指出的那樣,你爲什麼這樣做?您點擊的元素可以簡稱爲$(this)this。對我來說,可能更有意義的事:

$('#sidebar ul li ul li').click(function() { 
    $(this).addClass('active').parent('ul').parent('li').addClass('has-sub active'); 
}); 

,您可能還能夠與.closest('li')更換.parent('ul').parent('li'),但我需要看到的HTML結構,以確保萬無一失。

+0

謝謝,但我試過這個,並沒有工作 – nalpara

+0

它怎麼樣不起作用?您是否在控制檯中發現任何錯誤?你能創建一個jsFiddle.net的例子嗎? – j08691

+0

好的我更新了問題,當我點擊網格,例如菜單正在關閉。它不應該被關閉。當我手動將其id寫入JavaScript代碼時,它保持打開狀態。 – nalpara

0

你是否想將新類​​應用於變量ID中的ID?如果是這樣,您目前正在將這些應用於ID爲「ID」的元素。您應該使用以下選擇器:$('#'+ids).

1

ids是一個變量,它包含點擊元素的id。並在您的代碼中:

$('#ids').addClass('active'); 
$('#ids').parent('ul').parent('li').addClass('has-sub active'); 

您使用ids作爲字符串。這不是正確的方法。您應該將$('#ids')替換爲$('#' + ids)

試試這個:

$('#' + ids).addClass('active'); 
$('#' + ids).parent('ul').parent('li').addClass('has-sub active'); 
+0

@AshleyMedway:請看更新的答案:) –

+0

謝謝,但我也試過這個,並沒有工作 – nalpara

2

你正在服用的id當前元素來連接在一起的選擇。相反,您可以在處理程序中使用關鍵字this,並將其用作對被單擊元素的引用。試試這個:

$('#sidebar ul li ul li').click(function() { 
    $(this).addClass('active').closest('li').addClass('has-sub active'); 
}); 
+0

謝謝,但我試過這個並沒有工作 – nalpara

+0

請你解釋爲什麼它不起作用。錯誤?意外的行爲?鑑於您的OP中的信息,沒有理由不應該這樣做。 –

+0

我不知道原因,因爲當我通過手動輸入名稱來寫這個名字時沒有錯誤,如下所示: $('#general')。addClass('active'); //$('#general').parent('ul').parent('li').addClass('has-sub active'); 這是好的,但當我得到的ID它不起作用 – nalpara