Bạn sẽ so sánh các đối tượng jQuery như thế nào?


101

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

đâ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 những gì tôi đang gặp phải, họ có thể chỉ cho tôi cách làm đúng không?


2
var $parent = $(this).parent(), $body = $('body'); var theSame = $parent.is($body); api.jquery.com/is/#is-jQuery-object
Victor

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

Câu trả lời:


158

Bạn cần so sánh các phần tử DOM thô, ví dụ:

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

hoặc là

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 một vòng lặp của một số loại để so sánh từng kết quả.
Jimmy Cuadra

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

2
Có thể rút gọn thành: if (this.parentNode === document.body);
ehynds


60

Tại sao không:

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

?


1
Hoặcif ($(this).parent().is($("body")))
dieend

18

Không bắt buộc phải lặp lại vòng lặp, không yêu cầu kiểm tra nút đầu tiên. Không có gì cần thiết ngoài việc đảm bảo chúng 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 nó thành một plugin jquery để sử dụng cho 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 {}
});

Điều này sẽ không nói rằng các div sau đây bằng nhau? <div>abc</div> <div>def</div>
Charlie Schliesser

Không, bộ lọc sẽ không chuyển các phần tử DOM không bằng nhau.
tbranyen 27/10/11

2

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

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


Raw DOM Elements 2 báo cáo nhanh nhất đối với tôi: trông giống như mọi trình duyệt được báo cáo khác.
Kyle Hotchkiss

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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.