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:
Kể từ jquery 1.6, bây giờ bạn có thể chỉ cần thực hiện:
$element1.is($element2)
Đ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');
$.is
Hay chỉ
if (openActivity[0] == this) alert('hello');
(không có phiên bản jQuery mới ;-)
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!
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
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.