Sprawdź, czy dwa elementy są takie same

87

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?

Jonasza
źródło

Odpowiedzi:

138

Od jquery 1.6 możesz teraz po prostu zrobić:

$element1.is($element2)
chrisarton
źródło
7
To najlepsza odpowiedź dla wszystkich najnowszych wersji Jquery.
Chris Jaynes,
Kolejny, na który chciałbym zagłosować za każdym razem, gdy skończę, szukając w Google tego samego pytania i znajdując tę ​​odpowiedź
freefaller
75

To powinno działać:

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

tak powinno

if (openActivity[0] == $(this)[0]) alert('hello');
epascarello
źródło
3
czy twój drugi przykład nie powinien być ===, a nie ==, aby poprawnie odzwierciedlić pierwszy przykład?
Prusprus
3
Ta odpowiedź mogła być poprawna w starszych wersjach jquery, ale większość ludzi prawdopodobnie używa wersji, która obsługuje$.is
Chris Jaynes,
14

Lub tylko

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

(bez nowej instancji jQuery ;-)

Francesco Terenzani
źródło
12

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!

yodabar
źródło
5

Użyłbym addClass () do oznaczenia otwartego i możesz to łatwo sprawdzić.

Santi
źródło
3

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
allenhwkim
źródło
0

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ć.

Poklepać
źródło