2010-03-09 20 views

Odpowiedz

117

Można porównać elementy DOM. Pamiętaj, że selektory jQuery zwracają tablice, które nigdy nie będą równe w sensie równości odniesienia.

Zakładając:

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

to:

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

Zwraca true.

+0

Have testowałeś to? Jestem prawie pewien, że to nie zwróci prawdziwości ze względu na różnice we właściwości '.selector'. –

+3

Tak, testowałem ten kod na IE6, FF 3.6 i Chrome 4. Zwraca 'true' we wszystkich tych przeglądarkach. –

+5

Zobacz poniższy komentarz autorstwa @ R-U-Bn. Poniżej znajduje się sztuczka: a.is (b) – JCallico

-1

Zbieranie wyników wrócisz z kolekcji jQuery nie obsługują zestaw oparty na porównanie. Możesz użyć porównania poszczególnych elementów jeden po drugim, nie ma żadnych narzędzi do tego, o których wiem w jQuery.

2

Losowe AirCoded przykładem badania "set równości" w 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

każdym razem wywołać funkcję jQuery(), nowy obiekt jest tworzony i wrócił. Więc nawet kontrole równości na tych samych selektorach zawiodą.

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

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

Powstały obiekt jQuery zawiera szereg elementów, które są dopasowane w zasadzie rodzimych obiektów DOM jak HTMLDivElement że zawsze odnoszą się do tego samego obiektu, należy więc sprawdzić te równości za pomocą indeksu tablicy jak sugeruje Darin.

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

Dla przypomnienia, jQuery ma is() funkcję dla tego:

a.is(b) 

Zauważ, że a jest już instancją jQuery.

+2

Działa dobrze! –

+0

Ta metoda ma także tę zaletę, że działa tam, gdzie "==" rozwiązanie nie: '$ (event.target) .is ($ (" # a "))' – Tyson

+1

@DanielS Nie sądzę, że twoje 2 dodane "$ (..) "są wymagane tutaj, ponieważ w pytaniu a i b są już instancjami jquery. Wspomnę też o tym innym osobom, które mogą uważać, że musisz podwoić obciążenie. –

3
a.is(b) 

i sprawdzić, czy nie są one równe korzystanie

!a.is(b) 

jak

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

być może klasa dodany do elementu lub z niego usunięte po pierwsze zadanie

+0

a.not (b) nie jest odwrotnością a.is (b) raczej usuwa elementy b z a. Zamiast tego użyj! A.is (b) –

+0

Tak, masz rację! – Jondi