2010-03-13 9 views
97

Quindi sto cercando di capire come confrontare due oggetti jQuery, per vedere se l'elemento genitore è il corpo di una pagina.Come compareresti gli oggetti jQuery?

ecco quello che ho:

if ($(this).parent() === $('body')) ... 

So che questo è sbagliato, ma se qualcuno capisce quello che voglio dire, potrei mi puntare verso il modo corretto di fare questo?

+2

'var $ genitore = $ (this) .parent(), $ body = $ ('body');' ' var THESAME = $ parent.is ($ corpo);' http : //api.jquery.com/is/#is-jQuery-object – Victor

+1

$ (questo) .parent(). is ($ ('body')); // o controlla qualcos'altro oltre a $ ('body') http://stackoverflow.com/a/6986013/112100 – Omu

risposta

156

È necessario confrontare gli elementi DOM prime, ad es .:

if ($(this).parent().get(0) === $('body').get(0)) 

o

if ($(this).parent()[0] === $('body')[0]) 
+1

Ciò garantisce l'uguaglianza solo se l'oggetto jQuery corrisponde a un singolo elemento DOM. Se ci fossero più incontri avresti bisogno di un ciclo di qualche tipo per confrontare ciascuno di essi. –

+1

@Jimmy, sì ma questo è sufficiente per i requisiti OP, vuole solo sapere "... se l'elemento genitore è il corpo ..." – CMS

+2

Può abbreviare a: if (this.parentNode === document.body); – ehynds

59

Perché non:

if ($(this).parent().is("body")) { 
    ... 
} 

?

+0

Oppure 'if ($ (questo) .parent(). is ($ ("body"))) ' – dieend

17

Il ciclo non è necessario, il test del primo nodo singolo non è necessario. Praticamente nulla è richiesto se non quello di garantire che abbiano la stessa lunghezza e condividano nodi identici. Ecco un piccolo snippet di codice. Si potrebbe anche voler convertire questo in un plugin jQuery per i propri usi.

jQuery(function($) { 
    // Two separate jQuery references 
    var divs = $("div"); 
    var divs2 = $("div"); 

    // They are equal 
    if (divs.length == divs2.length && divs.length == divs.filter(divs2).length) {   

    // They are not 
    } else {} 
}); 
+0

Non direste che i seguenti div sono uguali? '

abc
' '
def
' –

+0

No, il filtro non passa elementi DOM non uguali. – tbranyen

2

Mi sono imbattuto in queste risposte e mi sono chiesto quale fosse il migliore. Tutto dipende dalle tue esigenze ma il modo più semplice per digitare, leggere ed eseguire è il migliore, naturalmente. Ecco la prova perfetta che ho fatto per prendere una decisione.

http://jsperf.com/jquery-objects-comparison

+0

Raw DOM Elements 2 che riporta per me il più veloce: sembra uguale per tutti gli altri browser segnalati. –

+0

Esattamente, è uguale al primo ma usa l'analisi array nativo di javascript. – Salketer