2011-08-18 33 views
5

Tôi nghĩ rằng hàm near() sẽ làm điều này cho tôi, nhưng dường như không. Tôi có đánh dấu sau và tôi muốn thêm vào một lớp học để tất cả neo phụ huynh với kích hoạt lớp:jquery - di chuyển lên cây và tìm các phần tử với lớp được chỉ định

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

Tôi muốn chọn mục tiêu của tôi - trong ví dụ này, neo sâu nhất, sau đó thêm một lớp cho mỗi một .trigger trong ascendants của nó. cách nào tốt nhất để làm việc này? Cảm ơn.

Trả lời

3

Dưới đây là một ví dụ sử dụng một sự kết hợp của jQuery.parents() (để có được chứa <li> tags) và sau đó jQuery.children() để có được những <a> thẻ với một lớp kích hoạt:

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

jsfiddle example

EDIT :

Lưu ý $().parents() vượt qua tất cả các con đường lên cây, nhưng $().children() chỉ đi ngang qua một cấp. Để thu thập tất cả các hậu duệ của một phần tử, hãy sử dụng $().find().

+0

Tôi sẽ thêm ví dụ jsfiddle ngay sau khi họ trực tuyến trở lại :) –

+0

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

+0

Không biết về jsbin, cảm ơn! Không sạch sẽ như jsfiddle nhưng nó sẽ làm trong một pinch. –

2

Bạn muốn sử dụng

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

Sử dụng .parents phương pháp (mà đi qua tất cả các con đường lên cây DOM, chứ không phải là .parent, mà chỉ đi qua một mức độ lên.

0

parents Được sử dụng để vượt qua lên.

Tôi tin rằng điều này sẽ hoạt động:

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

Tuy nhiên đối với anh chị em bạn sẽ cần phải sử dụng siblings thay vì parents Ví dụ: thẻ anchor được gắn với neo #my_target được coi là anh chị em.

Các vấn đề liên quan