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?

Odpowiedzi:


138

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

$element1.is($element2)

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');

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,


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!


5

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


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

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.