2008-10-28 30 views
7

Tôi muốn kiểm tra tổ tiên bằng cách sử dụng hai đối tượng jQuery. Họ không có ID và chỉ có sẵn dưới dạng đối tượng jQuery (hoặc nút DOM nếu bạn gọi là get()). jQuery is() chỉ hoạt động với các biểu thức, do đó, mã này sẽ là lý tưởng nhưng sẽ không làm việc:Tổ tiên jQuery sử dụng các đối tượng jQuery

var someDiv = $('#div'); 

$('a').click(function() { 
    if ($(this).parents().is(someDiv)) { 
     alert('boo'); 
    } 
} 

Chỉ muốn để xem nếu một phần tử là một đứa trẻ của người khác và tôi muốn tránh bước trở lại vào DOM đất nếu khả thi.

Trả lời

12

Bạn có thể sử dụng phương thức index() để kiểm tra xem một phần tử có tồn tại trong một danh sách hay không, do đó công việc sau đây sẽ như thế nào?

var someDiv = $('#div'); 

$('a').click(function() { 
    if ($(this).parents().index(someDiv) >= 0) { 
     alert('boo'); 
    } 
} 

Từ #index reference.

+0

Perfect Gareth, cảm ơn bạn! Tôi muốn bỏ phiếu cho bạn, nhưng số điểm danh tiếng ít ỏi của tôi đã ngăn cản tôi làm như vậy. – MichaelThompson

1

Cùng những dòng, cha mẹ() tùy ý chấp nhận một chọn riêng của mình:

$('a').click(function() { 
    if ($(this).parents("#div").length) { 
    alert('boo'); 
    } 
}); 
+0

.parents() chỉ chấp nhận cơ bản nhất của các bộ chọn (nghĩa là chỉ các bộ chọn mô tả một phần tử đơn lẻ sẽ hoạt động - không phải các bộ chọn mô tả các ký tự như "p strong"). –

+0

Nó hoạt động tốt cho những gì anh ấy đang cố gắng làm. –

+0

Tôi đơn giản hóa ví dụ của tôi một chút, vì vậy trong mã thực tế tôi nhận được đối tượng cha bằng cách sử dụng các tham chiếu jQuery được lưu trữ thay vì các bộ chọn chuỗi. – MichaelThompson

0

Một cách sẽ được sử dụng chức năng lọc

$('a').click(function() { 
    $(this).parents().filter(function() { 
     return this == someDiv[0]; 
    }).each(function() { 
     alert('foo'); 
    }) 
} 

Tôi nghĩ bạn cũng có thể nhận được ngay với việc sử dụng jQuery.inArray

if ($.inArray(someDiv, $(this).parents())) { 
     alert('boo'); 
} 
0

Bạn sẽ không nhận được kết quả mà bạn muốn chỉ đơn giản bằng cách sử dụng CSS se lector?

$('#div a').click(function() { ... }); 
10

Kiểm tra (this).parents().index(someDiv) >= 0, như @Gareth gợi ý, sẽ hoạt động tốt.

Tuy nhiên, sử dụng jQuery ancestry plugincách nhanh hơn/hiệu quả hơn.

+0

Cảm ơn bạn! Plugin tổ tiên và phương thức DOM nhanh hơn đáng kể. – MichaelThompson

+1

Còn việc cho chúng tôi một phiếu bầu thì sao? ;-) –

0

Hãy thử điều này:

var someDiv = $('#div'); 

$('a').click(function() { 
    if ($.inArray($(this).parents().get(), someDiv.get(0)) { 
     alert('boo'); 
    } 
} 
0
var $element = $('a'); 
while ($element && !$element.is('someDiv')) { 
    var $element = $element.parent(); 
}; 
Các vấn đề liên quan