2012-02-20 11 views
5

Biorąc pod uwagę następującą strukturę HTML:Upewnić się dwa elementy są rodzeństwem w JS/jQuery

<div class="wrap"> 
    <div id="a"></div> 
    <div id="b"></div> 
</div> 

poniższych jest fałszywe:

($('#a').parent() == $('#b').parent()); //=> false 

chociaż:

$('#a').parent().children('#b').length; //=> 1 

Czy ktoś może wyjaśnić czemu? Dzięki!

Odpowiedz

6

Nie jestem w 100% dokładnie, dlaczego to nie działa, ale wierzę, że dzieje się tak dlatego, że elementy są zawijane w obiekty jQuery, które są z natury różne dla każdego elementu.

Jako obejście, można porównać rodzimą obiekt DOM, tak:

($('#a').parent()[0] == $('#b').parent()[0]); // true 

Example fiddle

+0

bardzo dziękuję :) – abrad45

3

powodu tego samego powodu, że $('#a) == $('#a') jest false

każdym razem jQuery builts zestaw elementów, zwraca nowy obiekt nowy (nawet jeśli obiekt jQuery otacza te same elementy co inny). W JavaScript, czas gdy obiekt jest równy innemu, jest taki sam, jeśli jest to dokładnie ten sam obiekt;

var a = { 
    foo: 1 
}; 
var b = { 
    foo: 1 
}; 

(a == b) // false; 

Aby rozwiązać ten problem, można porównać DOM obiektów bezpośrednio (albo za pomocą .get(i) lub korzystania z obiektu jQuery jak array ([i])), albo masz użyć metody is();

if ($('.foo').get(i) == $('.bar').get(i)); 
if ($('.foo')[0] == $('.bar')[0]); 
if ($('.foo').is($('.bar')); // or even... 
if ($('.foo').is('.bar')); 
+2

'$ ('. Foo'). Jest (" .bar ")" powinno wystarczyć. –

+0

dzięki za wyjaśnienie! – abrad45

Powiązane problemy