Сначала я подозревал, что это сработает:
if ($('#element') == $('#element')) alert('hello');
Но это не так. Как проверить, совпадают ли элементы?
javascript
jquery
Иона
источник
источник
Это должно работать:
if ($(this)[0] === $(this)[0]) alert('hello');
так должно это
if (openActivity[0] == $(this)[0]) alert('hello');
источник
$.is
Или просто
if (openActivity[0] == this) alert('hello');
(без нового экземпляра jQuery ;-)
источник
Как кто-то уже сказал, один и тот же 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 :)
С уважением!
источник
Я бы использовал addClass () для отметки открытого, и вы можете легко это проверить.
источник
9 лет спустя без jQuery
Если два элемента совпадают, два элемента должны иметь один и тот же указатель. Таким образом,
document.body === document.body // true document.querySelector('div') === document.querySelector('div') // true document.createElement('div') === document.createElement('div') // false
источник
Как сказал Шелковистый или Санти, уникальный идентификатор или класс будет самым простым способом проверки. Причина, по которой ваши операторы if не работают так, как вы ожидаете, заключается в том, что они сравнивают 2 объекта и проверяют, являются ли они одним и тем же объектом в памяти.
Поскольку $ (this) всегда создает новый объект, они никогда не могут равняться друг другу. Вот почему вам нужно протестировать свойство объекта. Вы могли бы обойтись без уникального идентификатора / класса, если бы каждый элемент openActivity гарантированно имел различный контент, с которым вы могли бы протестировать.
источник