2013-03-04 29 views
10

Kliknięcie na elemencie:jQuery porównać dwa obiekty DOM?

$('.my_list').click(function(){ 
    var selected_object = $(this); 

    $('.my_list').each(function(){ 
     var current_object = $(this); 

     if(selected_object == current_object) alert('FOUND IT !'); 
    }); 
}); 

Nie wiem dlaczego, ale nie pojawia się komunikat ostrzegawczy „FOUND IT!”.

+0

spróbować użyć === i zobaczyć –

Odpowiedz

31

Można użyć jQuery.is funkcję:

sprawdzić aktualny dopasowany zestaw elementów przeciwko selektora, element, lub obiekt jQuery i powrócić true, jeśli co najmniej jeden z tych elementów dopasowuje podane argumenty.

if (selected_object.is(current_object)) { 
    ...  
} 

Alternatywnym rozwiązaniem jest użycie jQuery.get funkcję dostać surowe elementy i porównać je za pomocą == lub === operator:

if (selected_object.get(0) == current_object.get(0)) { 
    ... 
} 

jsFiddle demo

3

Nie ma dobrej odpowiedzi pod warunkiem ... ale ważne jest, aby zrozumieć, dlaczego bezpośrednio nie można porównać selektorów w jQuery.

selektory jQuery zwracają struktur danych, które nigdy nie będą równe w sensie równości odniesienia. Tak więc jedynym sposobem, aby to zrozumieć, jest uzyskanie odwołania do DOM z obiektu jQuery i porównanie elementów DOM.

Najprostsze porównanie odniesienia DOM dla powyższego przykładu będzie:

selected_object.[0] == current_object.[0]