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?
javascript
jquery
Jonasza
źródło
źródło
To powinno działać:
if ($(this)[0] === $(this)[0]) alert('hello');
tak powinno
if (openActivity[0] == $(this)[0]) alert('hello');
źródło
$.is
Lub tylko
if (openActivity[0] == this) alert('hello');
(bez nowej instancji jQuery ;-)
źródło
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!
źródło
Użyłbym addClass () do oznaczenia otwartego i możesz to łatwo sprawdzić.
źródło
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
źródło
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ć.
źródło