¿Cómo compararías los objetos jQuery?


101

Así que estoy tratando de averiguar cómo comparar dos objetos jQuery para ver si el elemento principal es el cuerpo de una página.

esto es lo que tengo:

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

Sé que esto está mal, pero si alguien entiende a lo que me refiero, ¿podría indicarme la forma correcta de hacerlo?


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

1
$ (esto) .parent (). es ($ ('cuerpo')); // o verifique cualquier otra cosa además de $ ('body') stackoverflow.com/a/6986013/112100
Omu

Respuestas:


158

Debe comparar los elementos DOM sin procesar, por ejemplo:

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

o

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

1
Eso solo garantizará la igualdad si el objeto jQuery coincide con un solo elemento DOM. Si hubiera varias coincidencias, necesitaría un bucle de algún tipo para comparar cada una.
Jimmy Cuadra

1
@Jimmy, sí, pero esto es suficiente para los requisitos de OP, solo quiere saber "... si el elemento principal es el cuerpo ..."
CMS

2
Puede acortarse a: if (this.parentNode === document.body);
ehynds


60

Por qué no:

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

?


1
Oif ($(this).parent().is($("body")))
dieend

18

No se requiere bucle, no es necesario probar el primer nodo único. No se requiere prácticamente nada más que asegurarse de que tengan la misma longitud y compartan nodos idénticos. Aquí hay un pequeño fragmento de código. Es posible que incluso desee convertir esto en un complemento de jquery para sus propios usos.

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

¿No diría esto que los siguientes divs son iguales? <div>abc</div> <div>def</div>
Charlie Schliesser

No, el filtro no pasaría elementos DOM que no sean iguales.
tbranyen

2

Tropecé con estas respuestas y me pregunté cuál era mejor. Todo depende de sus necesidades, pero el más fácil de escribir, leer y ejecutar es el mejor, por supuesto. Aquí está el caso de prueba de rendimiento que hice para tomar una decisión.

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


Raw DOM Elements 2 reporta el más rápido para mí: se ve igual para todos los demás navegadores reportados también.
Kyle Hotchkiss

Exactamente, es el mismo que el primero, pero usa el análisis de matriz nativo de JavaScript.
Salketer
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.