Kiểm tra xem hai phần tử có giống nhau không


87

Tôi nghi ngờ điều này lúc đầu có hiệu quả:

if ($('#element') == $('#element')) alert('hello');

Nhưng nó không. Làm thế nào để kiểm tra xem các phần tử có giống nhau không?

Câu trả lời:


138

Kể từ jquery 1.6, bây giờ bạn có thể chỉ cần thực hiện:

$element1.is($element2)

7
Đây là câu trả lời tốt nhất cho tất cả các phiên bản gần đây của Jquery.
Chris Jaynes

Một số khác tôi ước gì có thể upvote cho mỗi khi tôi kết thúc Googling cùng một câu hỏi và tìm câu trả lời này
freefaller

75

Điều này sẽ hoạt động:

if ($(this)[0] === $(this)[0]) alert('hello');

cái này cũng nên

if (openActivity[0] == $(this)[0]) alert('hello');

3
Ví dụ thứ hai của bạn không phải là === và không phải là ==, để phản ánh đúng ví dụ đầu tiên của bạn?
Prusprus

3
Câu trả lời này có thể đúng trong các phiên bản cũ hơn của jquery, nhưng có lẽ hầu hết mọi người đang sử dụng phiên bản hỗ trợ$.is
Chris Jaynes 14/02


12

Như ai đó đã nói, cùng một phần tử HTML được bao bọc trong hai thời điểm khác nhau sẽ tạo ra hai trường hợp jQuery khác nhau, vì vậy chúng không bao giờ có thể bằng nhau.

Thay vào đó, các phần tử HTML được bao bọc có thể được so sánh theo cách đó, vì vị trí bộ nhớ mà chúng chiếm giữ là giống nhau nếu nó là cùng một phần tử HTML, vì vậy:

var LIs = $('#myUL LI');
var $match = $('#myUL').find('LI:first');

alert(LIs.eq(0) === $match); // false
alert(LIs.get(0) === $match.get(0)) // TRUE! yeah :)

Trân trọng!


5

Tôi sẽ sử dụng addClass () để đánh dấu đã mở và bạn có thể kiểm tra điều đó một cách dễ dàng.


3

9 năm sau, không có jQuery

Nếu hai phần tử giống nhau thì hai phần tử phải có cùng một con trỏ. Vì vậy,

document.body === document.body // true
document.querySelector('div') === document.querySelector('div') // true
document.createElement('div') === document.createElement('div') // false

0

Giống như silky hoặc Santi đã nói, một ID hoặc lớp duy nhất sẽ là cách dễ nhất để kiểm tra. Lý do câu lệnh if của bạn không hoạt động như bạn mong đợi là vì nó so sánh 2 đối tượng và xem chúng có phải là cùng một đối tượng trong bộ nhớ hay không.

Vì nó luôn là một đối tượng mới được tạo bởi $ (this), chúng không bao giờ có thể bằng nhau. Đó là lý do tại sao bạn phải kiểm tra trên một thuộc tính của đối tượng. Bạn có thể không có id / class duy nhất nếu mỗi phần tử openActivity được đảm bảo có nội dung khác nhau mà bạn có thể kiểm tra.

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.