2011-08-18 38 views
5

我認爲closer()函數會爲我做這件事,但看起來不是。我有以下的標記,我想一個類添加到所有父錨與類觸發:jquery - 遍歷樹並找到指定類的元素

<ul> 
    <li class="selected"> 
     <a class="trigger" href=""></a> 
     <a href=""></a> 
     <ul> 
     <li class="selected"> 
      <a class="trigger" href=""></a> 
      <a href="" id = "my_target"></a> 
     </li> 
     </ul> 
    </li> 
    </ul> 

我要選擇我的目標 - 在這個例子中,最深的錨,然後添加一個類每一個觸發其優勢。什麼是最好的方法來做到這一點?謝謝。

回答

3

下面是使用的jQuery.parents()的組合(以獲得所述含<li>標籤),然後jQuery.children()與類觸發的獲取<a>標記的示例:

$(document).ready(function() { 
    $('#my_target').click(function(e) { 
     $(this).parents('li.selected').children('a.trigger').addClass('myclass'); 
     e.preventDefault(); 
    }); 
}); 

jsfiddle example

EDIT :

注意$().parents()遍歷樹,但$().children()只遍歷一個級別。要收集元素的所有後代,請使用$().find()

+0

我會盡快添加一個jsfiddle示例,只要他們重新聯機:) –

+0

http://jsbin.com/oxeyiz/edit#javascript,html,live –

+0

不知道jsbin,謝謝!沒有jsfiddle那麼幹淨,但它會在一個捏。 –

2

你想用

$('#my_target').parents('a.trigger'); 

使用.parents方法(遍歷所有的方式DOM樹,而不是.parent,只穿過一個級別。

0

parents是用於遍歷。最多

我認爲這應該工作:

$('#my_target').parents('.trigger').addClass('myclass'); 

但是,對於兄弟姐妹,您需要使用siblings而不是parents 例如,與#my_target錨點一起使用的anchor標籤被認爲是兄弟姐妹。