Come confronteresti gli oggetti jQuery?


101

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

ecco cosa ho:

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

So che è sbagliato, ma se qualcuno capisce cosa sto dicendo, potrebbe indicarmi il modo corretto di farlo?


2
var $parent = $(this).parent(), $body = $('body'); var theSame = $parent.is($body); api.jquery.com/is/#is-jQuery-object
Victor

1
. $ (this) .parent () è ($ ( 'body')); // o controlla qualcos'altro oltre a $ ('body') stackoverflow.com/a/6986013/112100
Omu

Risposte:


158

Devi confrontare gli elementi DOM grezzi, ad esempio:

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

o

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

1
Ciò garantirà l'uguaglianza solo se l'oggetto jQuery corrisponde a un singolo elemento DOM. Se ci fossero più corrispondenze, avresti bisogno di un ciclo di qualche tipo per confrontarle.
Jimmy Cuadra

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

2
Può essere abbreviato in: if (this.parentNode === document.body);
ehynds


60

Perchè no:

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

?


1
Oppureif ($(this).parent().is($("body")))
morire il

18

Il looping non è richiesto, non è richiesto il test del primo nodo singolo. Praticamente non è richiesto altro che assicurarsi che abbiano la stessa lunghezza e condividano nodi identici. Ecco un piccolo frammento di codice. Potresti persino convertirlo in un plugin jquery per i tuoi 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 {}
});

Questo non direbbe che i seguenti div sono uguali? <div>abc</div> <div>def</div>
Charlie Schliesser

No, il filtro non passerebbe gli elementi DOM che non sono uguali.
tbranyen

2

Mi sono imbattuto in queste risposte e mi sono chiesto quale fosse la migliore. Tutto dipende dalle tue esigenze, ma il più facile da digitare, leggere ed eseguire è ovviamente il migliore. Ecco il caso di prova delle prestazioni che ho creato per prendere una decisione.

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


Raw DOM Elements 2 è il più veloce per me: sembra lo stesso anche per tutti gli altri browser segnalati.
Kyle Hotchkiss

Esattamente, è uguale al primo ma utilizza l'analisi dell'array nativo di JavaScript.
Salketer
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.