2010-03-13 16 views
97

Vì vậy, tôi đang cố gắng tìm ra cách so sánh hai đối tượng jQuery, để xem liệu phần tử gốc có phải là phần thân của trang hay không.Bạn sẽ so sánh các đối tượng jQuery như thế nào?

đây là những gì tôi có:

if ($(this).parent() === $('body')) ... 

Tôi biết điều này là sai, nhưng nếu ai hiểu được những gì tôi nhận được tại, họ có thể chỉ cho tôi hướng một cách chính xác để làm điều này?

+2

'var $ mẹ = $ .parent (this)(), $ body = $ ('body'); ' ' var theSame = $ parent.is ($ cơ thể);' http : //api.jquery.com/is/#is-jQuery-object – Victor

+1

$ (this) .parent(). là ($ ('body')); // hoặc kiểm tra bất cứ điều gì khác ngoài $ ('body') http://stackoverflow.com/a/6986013/112100 – Omu

Trả lời

156

Bạn cần phải so sánh các yếu tố DOM liệu, ví dụ .:

if ($(this).parent().get(0) === $('body').get(0)) 

hoặc

if ($(this).parent()[0] === $('body')[0]) 
+1

Điều đó sẽ chỉ đảm bảo sự bình đẳng nếu đối tượng jQuery khớp với một phần tử DOM duy nhất. Nếu có nhiều kết quả phù hợp, bạn cần có một vòng lặp nào đó để so sánh từng loại. –

+1

@ Jimmy, vâng nhưng điều này là đủ cho các yêu cầu OP, anh ta chỉ muốn biết "... nếu yếu tố cha mẹ là cơ thể ..." – CMS

+2

Có thể rút ngắn xuống: if (this.parentNode === document.body); – ehynds

59

Tại sao không:

if ($(this).parent().is("body")) { 
    ... 
} 

?

+0

Hoặc 'if ($ (điều này) .parent(). là ($ ("cơ thể"))) ' – dieend

17

Không yêu cầu lặp, kiểm tra nút đầu tiên không bắt buộc. Khá nhiều không có gì là cần thiết khác hơn là đảm bảo họ có cùng độ dài và chia sẻ các nút giống hệt nhau. Đây là một đoạn mã nhỏ. Bạn thậm chí có thể muốn chuyển đổi điều này thành một plugin jquery cho việc sử dụng của riêng bạn.

jQuery(function($) { 
    // Two separate jQuery references 
    var divs = $("div"); 
    var divs2 = $("div"); 

    // They are equal 
    if (divs.length == divs2.length && divs.length == divs.filter(divs2).length) {   

    // They are not 
    } else {} 
}); 
+0

Điều này không nói rằng các div sau đây là bằng nhau? '

abc
' '
def
' –

+0

Không, bộ lọc sẽ không vượt qua các phần tử DOM không bằng nhau. – tbranyen

2

Tôi tình cờ tìm ra những câu trả lời này và tự hỏi câu trả lời nào tốt hơn. Tất cả phụ thuộc vào nhu cầu của bạn nhưng dễ nhất để gõ, đọc và thực thi là tốt nhất tất nhiên. Đây là testcase hoàn hảo tôi đã đưa ra quyết định.

http://jsperf.com/jquery-objects-comparison

+0

Nguyên tố DOM thô 2 báo cáo nhanh nhất cho tôi: giống như mọi trình duyệt được báo cáo khác. –

+0

Chính xác, nó giống như cái đầu tiên nhưng sử dụng phân tích cú pháp mảng gốc của javascript. – Salketer

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