2013-08-30 12 views
9

Próbuję znaleźć rodzica elementu i jego rodzic pierwsze dziecko, kod jest tak:Znajdź rodzica i pierwsze dziecko z jego rodzicem

 <ul class="lowerMenu"> 
      <li><a href="" class="selected">Welcome</a></li> 
      <li><a href="">Logo</a></li> 
      <li><a href="">Websites</a></li> 
      <li><a href="">Stationery</a></li> 
      <li><a href="">Illustration</a></li> 
      <li><a href="">Full Pack</a></li> 
     </ul> 

function setIntervalAndExecute() { 
    changeImages(); 
    setTimeout(function(){ 
     showImages(imagesArray); 
    },500); 
    var intervalot = window.setInterval(function(){ 
     changeImages(); 
     var selected = $('.selected'); 
     if (!selected.parent().is(':last-child')) { 
      $('.selected').parent().next().children().addClass('selected'); 
      selected.removeClass('selected'); 
     } else { 
      $('.selected').parent().parent().children(':first-child').addClass('selected'); 
      selected.removeClass('selected'); // nesho ne mi rabotit ovdeki 
     } 
     window.setTimeout(function(){ 
      showImages(imagesArray); 
     },500); 
    },10000); 
    return intervalot; 
} 
var intervalot = setIntervalAndExecute(); 

Wiem, że to trochę skomplikowane, ale jestem nowy do jquery, więc to, co próbuję zrobić, to po wybraniu klasy "" do ostatniego elementu, który chcę usunąć i ustawić go na pierwszy element. Próbowałem już z tego, ale nie wydaje się działać

$('.selected').parent().parent().children(':first-child').addClass('selected'); 

i kiedy dojdzie do ostatniego elementu przedział jest wykonywany dwukrotnie, a następnie zatrzymuje się. Jest to strona, która pracuję nad:

http://nikodola.com/testsite

Odpowiedz

18

Jeśli pójdziesz się dwa poziomy, a następnie znaleźć następne dziecko, jesteś tylko jeden poziom spada - ci” ponownie ustawiając klasę selected na <li>, a nie na <a> poniżej. Musisz przejść kolejny poziom. Tak powinno być:

$('.selected').parent().parent().children(':first-child').children().addClass('selected'); 

Innym sposobem, aby dostać się tam jest:

$('.selected').parent().siblings(':first-child').children().addClass('selected'); 
+0

doskonały, bardzo dziękuję: D Wiedziałem, że coś małego i głupi .. ale zamiast dziecko() i umieścić dzieci() bo to nie działa tak jak tego –

+0

I już naprawiłem tę literówkę w mojej odpowiedzi. – Barmar

-1
$('.selected').closest('ul').find('li:first').addClass('selected'); 

odniesienia closest

-1

Nie ma potrzeby całkowity przejazd z powrotem do rodziców jednego po drugim w hierarchii można po prostu użyć parents() zamiast parent() w ten sposób

$('.selected').parents('ul.lowerMenu').children(:first-child').addClass('selected'); 

Spróbuj, to działa!

4
$('.selected').parent().siblings(':first-child').children().addClass('selected'); 

FIDDLE DEMO

Powiązane problemy