İlk başta bunun işe yarayacağından şüphelenirdim:
if ($('#element') == $('#element')) alert('hello');
Ama öyle değil. Öğelerin aynı olup olmadığı nasıl test edilir?
Yanıtlar:
Jquery 1.6'dan itibaren artık şunları yapabilirsiniz:
$element1.is($element2)
Bu çalışmalı:
if ($(this)[0] === $(this)[0]) alert('hello');
bu da olmalı
if (openActivity[0] == $(this)[0]) alert('hello');
$.is
Ya da sadece
if (openActivity[0] == this) alert('hello');
(yeni bir jQuery örneği olmadan ;-)
Birinin daha önce söylediği gibi, iki farklı an içine sarılmış aynı HTML öğesi iki farklı jQuery örneği oluşturur, bu nedenle asla eşit olamazlar.
Bunun yerine, sarılmış HTML öğeleri bu şekilde karşılaştırılabilir, çünkü işgal ettikleri bellek konumu aynı HTML öğesi ise aynıdır, bu nedenle:
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 :)
Saygılarımla!
9 yıl sonra, jQuery olmadan
İki öğe aynı ise, iki öğenin aynı işaretçiye sahip olması gerekir. Böylece,
document.body === document.body // true
document.querySelector('div') === document.querySelector('div') // true
document.createElement('div') === document.createElement('div') // false
İpeksi veya Santi'nin dediği gibi, benzersiz bir kimlik veya sınıf test etmenin en kolay yolu olacaktır. If ifadelerinizin beklediğiniz gibi çalışmamasının nedeni, 2 nesneyi karşılaştırması ve bellekte aynı nesne olup olmadıklarını görmesidir.
$ (This) tarafından yaratılan her zaman yeni bir nesne olduğundan, birbirlerine asla eşit olamazlar. Bu yüzden nesnenin bir özelliğini test etmelisiniz. Her openActivity öğesinin test edebileceğiniz farklı içeriğe sahip olması garantiliyse, benzersiz bir kimlik / sınıf olmadan kurtulabilirsiniz.