2010-03-09 48 views

Respuesta

117

Puede comparar los elementos DOM. Recuerde que los selectores de jQuery devuelven matrices que nunca serán iguales en el sentido de igualdad de referencia.

Suponiendo:

<div id="a" class="a"></div> 

esto:

$('div.a')[0] == $('div#a')[0] 

vuelve verdadera.

+0

Tener has probado esto? Estoy bastante seguro de que no volverá a ser cierto debido a las diferencias en la propiedad '.selector'. –

+3

Sí, he probado este código en IE6, FF 3.6 y Chrome 4. Devuelve 'true' en todos estos navegadores. –

+5

Vea el comentario a continuación por @ R-U-Bn. Lo siguiente es el truco: a.is (b) – JCallico

-1

La colección resultados que obtiene de vuelta de una colección de jQuery no admiten la comparación basada en el conjunto. Puede usar comparar los miembros individuales uno por uno, sin embargo, no hay utilidades para esto que yo sepa en jQuery.

2

ejemplo al azar AirCoded de prueba "set igualdad" en jQuery:

$.fn.isEqual = function($otherSet) { 
    if (this === $otherSet) return true; 
    if (this.length != $otherSet.length) return false; 
    var ret = true; 
    this.each(function(idx) { 
    if (this !== $otherSet[idx]) { 
     ret = false; return false; 
    } 
    }); 
    return ret; 
}; 

var a=$('#start > div:last-child'); 
var b=$('#start > div.live')[0]; 

console.log($(b).isEqual(a)); 
9

Cada vez que se llama a la función jQuery(), se crea un nuevo objeto y regresó. Por lo tanto, incluso las comprobaciones de igualdad en los mismos selectores fallarán.

<div id="a">test</div> 

$('#a') == $('#a') // false 

El objeto jQuery resultante contiene una serie de elementos coincidentes, que son básicamente objetos DOM nativos como HTMLDivElement que siempre se refieren al mismo objeto, por lo que debe comprobar los de la igualdad mediante el índice de matriz como se sugiere Darin.

$('#a')[0] == $('#a')[0] // true 
293

Para el registro, jQuery tiene una función para este is():

a.is(b) 

Tenga en cuenta que a ya es un ejemplo de jQuery.

+2

¡Funciona bien! –

+0

Este método también tiene la ventaja de funcionar donde la solución "==" no: '$ (event.target) .is ($ (" # a "))' – Tyson

+1

@DanielS No creo que haya agregado su 2 ps) "se requieren aquí, ya que en la pregunta ayb ya están las instancias jquery. También lo menciono para otras personas que puedan pensar que tiene que cargar dos veces. –

3
a.is(b) 

y para comprobar si no son iguales uso

!a.is(b) 

como para

$b = $('#a') 
.... 
$('#a')[0] == $b[0] // not always true 

tal clase añadido al elemento o retirado de él después de la primera asignación

+0

a.not (b) no es el inverso de a.is (b) sino que elimina los elementos b de a. En su lugar use! A.is (b) –

+0

Sí, tiene razón! – Jondi