Проверьте, совпадают ли два элемента

87

Сначала я подозревал, что это сработает:

if ($('#element') == $('#element')) alert('hello');

Но это не так. Как проверить, совпадают ли элементы?

Иона
источник

Ответы:

138

Начиная с jquery 1.6, теперь вы можете просто:

$element1.is($element2)
Chrisarton
источник
7
Это лучший ответ для всех последних версий JQuery.
Крис Джейнс,
Еще одна я хотел бы upvote за каждый раз , когда я в конечном итоге погуглить тот же вопрос и найти этот ответ
freefaller
75

Это должно работать:

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

так должно это

if (openActivity[0] == $(this)[0]) alert('hello');
Епаскарелло
источник
3
Разве ваш второй пример не должен быть ===, а не ==, чтобы правильно отразить ваш первый пример?
Prusprus
3
Этот ответ мог быть правильным в более старых версиях jquery, но большинство людей, вероятно, используют версию, которая поддерживает$.is
Крис Джейнс,
14

Или просто

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

(без нового экземпляра jQuery ;-)

Франческо Теренцани
источник
12

Как кто-то уже сказал, один и тот же HTML-элемент, заключенный в два разных момента, генерирует два разных экземпляра jQuery, поэтому они никогда не могут быть равными.

Вместо этого обернутые HTML-элементы можно сравнивать таким образом, поскольку занимаемое ими место в памяти совпадает, если это один и тот же HTML-элемент, поэтому:

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 :)

С уважением!

йодабар
источник
5

Я бы использовал addClass () для отметки открытого, и вы можете легко это проверить.

Санти
источник
3

9 лет спустя без jQuery

Если два элемента совпадают, два элемента должны иметь один и тот же указатель. Таким образом,

document.body === document.body // true
document.querySelector('div') === document.querySelector('div') // true
document.createElement('div') === document.createElement('div') // false
Allenhwkim
источник
0

Как сказал Шелковистый или Санти, уникальный идентификатор или класс будет самым простым способом проверки. Причина, по которой ваши операторы if не работают так, как вы ожидаете, заключается в том, что они сравнивают 2 объекта и проверяют, являются ли они одним и тем же объектом в памяти.

Поскольку $ (this) всегда создает новый объект, они никогда не могут равняться друг другу. Вот почему вам нужно протестировать свойство объекта. Вы могли бы обойтись без уникального идентификатора / класса, если бы каждый элемент openActivity гарантированно имел различный контент, с которым вы могли бы протестировать.

Пэт
источник