2009-07-24 63 views
0

需要幫助與像標記:的jQuery/CSS - 在選擇

<ul> 
    <li><a href="#">Link 1</a></li> 
    <li> 
     <a href="#">Link 2</a> 
     <ul> 
      <li><a href="#" class="active">Link 2.1</a></li> 
      <li><a href="#">Link 2.2</a></li> 
     </ul> 
    </li> 
</ul> 

我想加個班「活動」於具有內a.active鏈接,鏈接2(4號線),或鏈接。我怎麼能用jQuery或甚至純CSS來做到這一點?假設頂層UL

+0

我不太瞭解你的標準。你能重新解釋/解釋嗎? – cletus 2009-07-24 13:26:21

回答

3

使用「:has」運算符,可以使這更簡單很多。這一行抓取包含「li」的任何「li」元素和活動鏈接。

$('li:has(li>a.active)').addClass('active'); 
+0

這裏指的是tvanfosson的回覆,如果我將class「active」添加到已激活類的元素,它會導致任何問題嗎? – iceangel89 2009-07-25 03:03:26

0

一種方式具有yourUl的ID:

$('#yourUl>li>a').filter(function(){ 
    return $(this).find('a.active').length; 
}).addClass('active'); 
0

這是一個有點棘手,爲此在一般情況下,因爲它高度依賴的標記,但它看起來像你想要的是更改其下一個兄弟節點包含活動類的錨的任何一個錨的類。以下應該做的伎倆,略有優化,它會跳過已經如此標記的錨點。它使用nextAll()方法和:not:has選擇器。

$('a:not(.active)').nextAll(':has(a.active)') 
        .addClass('active'); 

如果需要限制在一定的水平初始錨,只是改變了最初的選擇,以便它是具體到你所需要的水平。最簡單的方法是根據特定元素$('#myList > a:not(.active)')或特定類$('a.topLevel:not(.active)')

0
//adds active to second anchor 
$('ul>li>a:eq(2)').addClass('active'); 

//adds active to anything with an active link as a descendant 
$('ul>li>a').each(function(i) { 
    if($('a.active', this).length > 0) 
     $(this).addClass('active'); 
});