2009-08-13 23 views

Odpowiedz

101

Jak jQuery 1.6 można teraz po prostu zrobić:

$element1.is($element2) 
+7

Jest to najlepsza odpowiedź dla wszystkich ostatnich wersji Jquery. –

+0

Kolejny chciałbym móc przegłosować za każdym razem, gdy skończę szukanie tego samego pytania i znalezienie tej odpowiedzi – freefaller

5

Chciałbym użyć addClass() do oznaczania otwartych i można to łatwo sprawdzić.

0

Silky lub Santi twierdzą, że najprostszym sposobem na sprawdzenie będzie unikalny identyfikator lub klasa. Powód, dla którego twoje instrukcje if nie działają tak, jak się spodziewasz, polega na porównywaniu 2 obiektów i sprawdzaniu, czy są to te same obiekty w pamięci.

Ponieważ jest to zawsze nowy obiekt tworzony przez $ (this), nigdy nie mogą się one równać. Dlatego musisz przetestować właściwość obiektu. Możesz uniknąć unikalnego identyfikatora/klasy, jeśli każdy element openActivity miałby inną zawartość, na którą mógłbyś przetestować.

73

To powinno działać:

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

więc powinien to

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

nie powinny być twój drugi przykład = == i nie ==, aby poprawnie odzwierciedlić Twój pierwszy przykład? – Prusprus

+3

Ta odpowiedź mogła być właściwa w starszych wersjach jquery, ale większość ludzi prawdopodobnie używa wersji obsługującej '$ .is' –

12

Jak ktoś już powiedział, ten sam element HTML zawinięte w dwóch różnych momentach generuje dwa różne instancje jQuery, więc nigdy nie może być równy.

Zamiast elementy HTML opakowane mogą być porównywane w ten sposób, ponieważ lokalizacja pamięci zajmują to 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 :) 

Pozdrawiam!

14

Albo po prostu

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

(bez nowej instancji jQuery ;-)

Powiązane problemy