2009-07-24 56 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'); 
});