2010-03-13 22 views
97

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.¿Cómo compararía los objetos jQuery?

esto es lo que tengo:

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

Sé que esto es incorrecto, pero si alguien entiende lo que quiero llegar, me podía apuntar hacia la forma correcta de hacer esto?

+2

'var $ parent = $ (this) .parent(), $ cuerpo = $ ('cuerpo');' ' Thésame var = $ parent.is ($ corporal);' http : //api.jquery.com/is/#is-jQuery-object – Victor

+1

$ (this) .parent(). is ($ ('body')); // o busca cualquier otra cosa además de $ ('body') http://stackoverflow.com/a/6986013/112100 – Omu

Respuesta

156

Es necesario comparar los elementos DOM primas, por ejemplo .:

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

o

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

Eso solo asegurará 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. –

+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

59

Por qué no:

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

?

+0

O 'if ($ (this) .parent(). is ($ ("body"))) ' – dieend

17

Looping no es necesario, no es necesario probar el primer nodo. No se requiere prácticamente nada más que garantizar que tengan la misma longitud y compartan nodos idénticos. Aquí hay un pequeño fragmento de código. Incluso puede querer convertir esto en un plugin 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 {} 
}); 
+0

¿No diría esto que los siguientes divs son iguales? '

abc
' '
def
' –

+0

No, el filtro no pasa los elementos DOM que no son iguales. – tbranyen

2

Me encontré con estas respuestas y me pregunté cuál era mejor. Todo depende de sus necesidades, pero la mejor manera de escribir, leer y ejecutar es la mejor, por supuesto. Aquí está el caso de pruebas de rendimiento que hice para tomar una decisión.

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

+0

Raw DOM Elements 2 que informa el más rápido para mí: tiene el mismo aspecto para todos los demás navegadores informados. –

+0

Exactamente, es el mismo que el primero, pero usa el análisis de matrices nativas de JavaScript. – Salketer

Cuestiones relacionadas