2013-03-26 44 views
26

closest() sẽ nhận phần tử đầu tiên khớp với công cụ chọn bằng cách kiểm tra chính phần tử đó và duyệt qua các tổ tiên của nó trong cây DOM. Nhưng tôi muốn biết Có cách nào có được kết quả loại trừ itseft (tôi có nghĩa là chỉ nhận được cha mẹ của nó)? cảm ơn.jquery gần nhất loại trừ tự

Hãy để tôi lấy một ví dụ. Xin vui lòng xem lại nó .

<div id='div1' class="container"> 
    <div id="div2" class="container"> 
     <!--many nested div.container as it directly or indirectly children --> 
    </div> 
    <div id="div3" class="container"> 
     <!--many nested div.container as it directly or indirectly children --> 
    </div> 
</div> 

$(function() { 

    $('div.container').on('mouseover', function(e){ 
     //I only want to select the first parent with the class container. 
     //closest include the this element. 
     console.log($(this).closest('.container').attr('id')); 
    }); 
}); 
+0

có thể giải thích thêm? thêm đoạn mã sẽ hữu ích hơn ... – Reigel

+3

'.parents()' sẽ trợ giúp. –

+0

@Reigel Bạn có thể vui lòng xem lại không? Tôi đã cập nhật. cảm ơn. –

Trả lời

0

Câu trả lời đúng là .parents('.container:first'); nhờ

+15

Hiệu suất-khôn ngoan, '.parent(). Gần nhất ('container')' nên thực hiện tốt hơn khi nó dừng lại sau khi kết hợp phần tử đầu tiên, không giống như '.parents()' mà luôn luôn đi qua tất cả các con đường lên đến cấp tài liệu. –

+0

Bạn biết không? Tôi nghĩ rằng '.parent() ....' là ít mã khó. –

+3

Vâng vâng. Di chuyển một cấp lên khi bạn không muốn phù hợp với cấp độ đầu tiên chỉ là hợp lý. Dù bằng cách nào cả hai đều có cùng một đầu ra - sự khác biệt là có ': first' bên trong' parent() 'có thể hơi tốn kém như': first' là phần mở rộng Sizzle và selectors thường được so khớp với từng phần tử (tổ tiên) trước trở về. –

69

Bạn có thể đi qua một mức độ trước khi cố gắng để tìm ra .closest() tổ tiên:

$(this).parent().closest('.container'); 
0

Nếu bạn thực sự muốn chỉ div cha mẹ, sau đó có $ (này) .parents ('. container') sẽ hoạt động. Nếu bạn muốn tìm phần tử gần nhất và cho phép nó là một anh chị em (có vẻ như đó là những gì bạn đang thực sự cố gắng thực hiện), bạn có thể sử dụng $ (this) .prev ('. Container').

+0

Điều này sẽ không hữu ích vì bạn không bao giờ biết cha mẹ của nó có lên cấp một hay cao hơn và bạn nhắm mục tiêu đến cha mẹ của mình theo lớp! Điều gì xảy ra nếu

được lồng trong một thẻ div khác không có lớp và anh ấy vẫn muốn nhắm mục tiêu đến cha mẹ! –

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