2013-08-30 44 views
9

Tôi cố gắng để tìm ra cha mẹ của một phần tử và đó là cha mẹ đứa con đầu lòng, mã này là như thế này:Tìm phụ huynh và đứa con đầu lòng của nó là mẹ

 <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(); 

Tôi biết đó là một chút phức tạp nhưng tôi mới để jquery, vì vậy những gì tôi đang cố gắng để làm là sau khi lớp 'được lựa chọn' được các yếu tố cuối cùng tôi muốn loại bỏ nó và đặt nó vào yếu tố đầu tiên. Tôi đã thử với điều này nhưng dường như không hoạt động

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

và khi đến phần tử cuối cùng, khoảng thời gian này sẽ thực hiện hai lần rồi dừng lại. Đây là trang web mà tôi đang làm việc trên:

http://nikodola.com/testsite

Trả lời

18

Nếu bạn đi lên hai cấp độ, sau đó tìm ra con tiếp theo, bạn sẽ chỉ xuống một cấp - bạn' thiết lập lại lớp selected trên <li>, không phải là <a> bên dưới nó .. Bạn cần phải đi xuống một cấp độ khác. Vì vậy, nó nên là:

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

Một cách khác để đạt được điều đó là:

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

hoàn hảo, cảm ơn bạn rất nhiều: D tôi biết nó là cái gì nhỏ và ngu ngốc .. nhưng thay vì con() tôi đặt trẻ em() vì nó không hoạt động như thế –

+0

tôi đã sửa lỗi đánh máy đó trong câu trả lời của tôi. – Barmar

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

tham khảo closest

-1

Không cần tổng vượt qua trở lại cho phụ huynh một sau khi khác trong một hệ thống phân cấp, bạn chỉ có thể sử dụng parents() thay vì parent() theo cách này

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

Hãy thử tính năng này hoạt động !!

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

FIDDLE DEMO