2008-11-13 28 views
16

Tôi đang cố gắng tìm ra hàm JS hoặc jQuery có thể tái sử dụng để cho phép tôi kiểm tra xem một đối tượng có phải là hậu duệ DOM của một đối tượng khác hay không.Đối tượng thử nghiệm cho mối quan hệ tổ tiên/hậu duệ trong JavaScript hoặc Jquery

Tôi đã nhìn thấy một mô hình thử nghiệm cho

$b.parents('nodename').length>0 

Đó là tuyệt vời khi bạn chỉ cần kiểm tra xem một yếu tố là con của bất kỳ nút theo tên đó.

Nhưng còn về một nút cụ thể thì sao? Bạn không thể kiểm tra

$b.parents($a).length>0 

Vì bố mẹ jQuery có biểu thức nodename làm đối số để lọc.

Là một nền tảng nhỏ, tôi đang cố gắng kiểm tra xem mục tiêu của sự kiện nhấp chuột của tài liệu có phải là con của một đối tượng cụ thể hay không. Ví dụ, nếu event.target là con của $ b, trả về true, ngược lại, trả về false. Nhưng chức năng này có thể có những tác động khác sau này.

Cảm ơn!

Trả lời

12

Trong jQuery ancestors using jQuery objects tôi đề nghị

if ($(obj1).parents().index($(obj2)) >= 0) { 
    // obj1 is a descendant of obj2 
} 
+1

Hoàn hảo. Điều này thực sự cho phép đi qua của một đối tượng thay vì chọn đó là tuyệt vời. Cảm ơn một lần nữa! – dreisch

+4

Bạn có thể chuyển một phần tử DOM chưa được nén để lập chỉ mục, vì vậy điều này có thể được đơn giản hóa nếu ($ (obj1) .parents(). Index (obj2)> = 0) –

+0

Hiện tại có $ .contains, nếu bạn lo lắng về Node.contains. –

2

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

$('#foo').filter(function(){ 

    return $(this).parent().is('#foo-parent'); 

}); 

Vì vậy, ở đây chúng tôi sẽ chọn tất cả các yếu tố foo và sau đó lọc chỉ các yếu tố có foo cha mẹ như cha mẹ trực tiếp của mình.

Nếu bạn đang tìm kiếm để tìm nếu bất kỳ của các tổ tiên của đối tượng hiện tuân thủ các quy tắc, sau đó tôi đoán nó nên là:

$('#foo').filter(function(){ 

    return $(this).parents().is('#foo-parent'); 

}); 
21
a.contains(b) 

Đây là giải pháp JavaScript thuần túy sử dụng Node.contains. Hàm bao gồm, a.contains(a) đánh giá là đúng.

Có trường hợp cạnh trong IE9: nếu b là nút văn bản, contains sẽ luôn trả về false.

+5

Điều này thật tuyệt! Nó làm việc cho tôi. Tôi luôn thích JS thuần túy hơn các khung công tác. – Firas

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