Como você compararia objetos jQuery?


101

Portanto, estou tentando descobrir como comparar dois objetos jQuery, para ver se o elemento pai é o corpo de uma página.

aqui está o que eu tenho:

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

Eu sei que isso é errado, mas se alguém entender o que estou querendo dizer, poderia me indicar a maneira correta de fazer isso?


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

1
$ (this) .parent (). is ($ ('body')); // ou verifique se há algo além de $ ('body') stackoverflow.com/a/6986013/112100
Omu

Respostas:


158

Você precisa comparar os elementos DOM brutos, por exemplo:

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

ou

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

1
Isso só garantirá a igualdade se o objeto jQuery corresponder a um único elemento DOM. Se houver várias correspondências, você precisará de algum tipo de loop para comparar cada uma.
Jimmy Cuadra

1
@Jimmy, sim, mas isso é suficiente para os requisitos de OP, ele quer apenas saber "... se o elemento pai é o corpo ..."
CMS

2
Pode ser abreviado para: if (this.parentNode === document.body);
Ehynds


60

Por que não:

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

?


1
Ouif ($(this).parent().is($("body")))
fim de

18

O loop não é necessário, o teste do primeiro nó único não é necessário. Praticamente nada é necessário além de garantir que eles tenham o mesmo comprimento e compartilhem nós idênticos. Aqui está um pequeno trecho de código. Você pode até querer convertê-lo em um plugin jquery para seu próprio uso.

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 {}
});

Isso não diria que os seguintes divs são iguais? <div>abc</div> <div>def</div>
Charlie Schliesser,

Não, o filtro não passaria elementos DOM que não sejam iguais.
tbranyen

2

Tropecei nessas respostas e me perguntei qual era a melhor. Tudo depende das suas necessidades, mas o mais fácil de digitar, ler e executar é o melhor, é claro. Aqui está o caso de teste de desempenho que fiz para tomar uma decisão.

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


Raw DOM Elements 2 relatando o mais rápido para mim: parece o mesmo para todos os outros navegadores relatados.
Kyle Hotchkiss

Exatamente, é o mesmo que o primeiro, mas usa a análise de array nativa do javascript.
Salketer
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.