2011-08-18 11 views
5

Myślałem, że funkcja closer() zrobi to za mnie, ale pozornie nie. Mam następujący znaczników i chcę, aby dodać klasę do wszystkich kotwic matek z klasy wyzwalania:jquery - przemieść drzewo i znajdź elementy o określonej klasie

<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> 

Chcę wybrać mój cel - w tym przykładzie, najgłębszy kotwica, następnie dodać klasę do każdej z nich .trigger w swoich przodkach. Jaki byłby najlepszy sposób na zrobienie tego? Dzięki.

Odpowiedz

3

Oto przykład przy użyciu kombinacji jQuery.parents() (aby otrzymać zawierające <li> tags), a następnie jQuery.children() uzyskać <a> tagi z klasą spuście:

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

jsfiddle example

EDIT :

Uwaga $().parents() przemierza całą drogę do góry, ale $().children() przesuwa się tylko o jeden poziom niżej. Aby zebrać wszystkich potomków elementu, użyj $().find().

+0

Dodam przykład jsfiddle, gdy tylko zostaną z powrotem online :) –

+0

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

+0

Nie wiedziałem o jsbin, dziękuję! Nie tak czysty jak jsfiddle, ale zrobi to szczypta. –

2

Chcesz użyć

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

Stosując metodę .parents (która przemierza całą drogę w górę drzewa DOM, zamiast .parent, który tylko przemierza jeden poziom wyżej.

0

parents Służy do przechodzenia . aż

wierzę, że to powinno działać:

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

Jednak dla rodzeństwa należy użyć siblings zamiast parents Na przykład znacznik anchor, który jest z kotwicą #my_target, jest uważany za rodzeństwo.

Powiązane problemy