2013-01-07 32 views
1

我有以下HTML結構:jQuery的目標父

<ul> 
<li id = "1"><a href = "">1</a></li> 
<li id = "2"><a href = "" class = "active">2</a></li> 
<li id = "3"><a href = "">3</a></li> 
<li id = "1"><a href = "">4</a></li> 
</ul> 

我願之類的「主動」申請ID爲2 li元素我試過如下:

if(jQuery('#navigation ul li a').hasClass('active')){ 
jQuery(this).parent().addClass('active'); 
} 

但它似乎並不奏效。

+2

@PulkitGoyal在HTML5中,它可以 –

回答

3

使用以下命令:

$('#navigation a.active').closest('li').addClass('active'); 
+0

好,簡而言之,答案。 – Alnitak

+0

謝謝,正是我正在尋找的 –

1

首先,如果你使用HTML4,您應該id只有數字,字母,而不是像「ID2」,例如啓動。然後,只需選擇ID

$('#id2').addClass('active'); 
0

只需使用:

$('#2').addClass('active'); 

你的代碼沒有工作的原因是因爲選擇,「#navigation UL李一」,有可能返回很多的結果,而你的代碼假定它只返回一個。如果你是想通過每個元素和測試「主動」進行迭代,嘗試:

$('#navigation ul li a').each(function() { 
    if($(this).hasClass('active')) { 
    $(this).parent().addClass('active'); 
    } 
}); 
3

在你當前的代碼你this是無效的 - 有沒有功能做工作,讓this不被設置爲元素你認爲你正在努力。

而不是使用.hasClass,使用您的選擇器來查找匹配的元素。然後,您可以使用.each()遍歷每個匹配的元素,每一次正確設置this

jQuery('#navigation ul li a.active').each(function() { 
    jQuery(this).parent().addClass('active'); 
}); 

這使你的代碼非常相似,你的原代碼。

儘管Konstantin的答案更好,但它避免了手動迭代的需要。作爲這個問題的答案的變化,如果你確定每個<a>元件直接包含在裏面<li>需要的類,您可以使用此:

jQuery('#navigation li > a.active').parent().addClass('active'); 

注意:你的ID字段應該是唯一的,數字標識僅在HTML5中有效。

+0

是否有'$''navigation li a.active')。parent()。addClass('active');'這裏夠了嗎? –

+0

@JustinJohn'''優先確保'a'是'li'的直接後代。 – Alnitak

0
$(".active").parent().addClass('active') 
+1

不好的答案 - 選擇器不夠具體,所以如果重複調用,它會一直向DOM樹傳播'active'類。 – Alnitak