2012-02-20 10 views
5

Data la seguente struttura HTML:Assicurarsi che due elementi sono fratelli in JS/jQuery

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

seguenti è falsa:

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

anche se:

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

Qualcuno potrebbe spiegare perché? Grazie!

risposta

6

Non sono al 100% esattamente sul motivo per cui non funziona, ma credo che sia perché gli elementi sono racchiusi in oggetti jQuery che sono intrinsecamente diversi per elemento.

Per risolvere il problema, è possibile confrontare l'oggetto DOM nativo, in questo modo:

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

Example fiddle

+0

grazie mille :) – abrad45

3

A causa della stessa ragione che $('#a) == $('#a') è false

Ogni volta jQuery builts un set di elementi, restituisce un nuovo oggetto (anche se l'oggetto jQuery racchiude gli stessi elementi di un altro). In JavaScript, lo solo tempo un oggetto è uguale a un altro, è se è esattamente lo stesso oggetto;

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

(a == b) // false; 

Per risolvere questo problema, è possibile confrontare il DOM oggetti direttamente (sia utilizzando .get(i) o utilizzando l'oggetto jQuery come un array ([i])), o si ottiene utilizzare il metodo 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'). È ('. Bar')' dovrebbe essere sufficiente. –

+0

grazie per la spiegazione! – abrad45