Podejrzewałbym, że to zadziała na początku:
if ($('#element') == $('#element')) alert('hello');
Ale tak nie jest. Jak sprawdzić, czy elementy są takie same?
Odpowiedzi:
Od jquery 1.6 możesz teraz po prostu zrobić:
$element1.is($element2)
To powinno działać:
if ($(this)[0] === $(this)[0]) alert('hello');
tak powinno
if (openActivity[0] == $(this)[0]) alert('hello');
$.is
Lub tylko
if (openActivity[0] == this) alert('hello');
(bez nowej instancji jQuery ;-)
Jak ktoś już powiedział, ten sam element HTML zawinięty w dwa różne momenty generuje dwie różne instancje jQuery, więc nigdy nie mogą być równe.
Zamiast tego zawinięte elementy HTML można porównać w ten sposób, ponieważ miejsce w pamięci, które zajmują, jest takie samo, jeśli jest to ten sam element HTML, więc:
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 :)
Z poważaniem!
9 lat później bez jQuery
Jeśli dwa elementy są takie same, dwa elementy muszą mieć ten sam wskaźnik. A zatem,
document.body === document.body // true
document.querySelector('div') === document.querySelector('div') // true
document.createElement('div') === document.createElement('div') // false
Jak powiedział Silky czy Santi, najłatwiejszym sposobem przetestowania byłby unikalny identyfikator lub klasa. Powodem, dla którego twoje instrukcje if nie działają tak, jak można się spodziewać, jest to, że porównuje 2 obiekty i sprawdza, czy są one tym samym obiektem w pamięci.
Ponieważ $ (this) zawsze tworzy nowy obiekt, nigdy nie mogą się one równać. Dlatego musisz przetestować na właściwości obiektu. Możesz uciec bez unikalnego identyfikatora / klasy, jeśli gwarantowano, że każdy element openActivity ma inną zawartość, którą możesz przetestować.