web-dev-qa-db-fra.com

comment comparer deux éléments dans jquery

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

C'est toujours faux. Comment pouvez-vous comparer deux éléments dans jQuery?

merci

128
zjm1126

Vous pouvez comparer des éléments DOM. Rappelez-vous que les sélecteurs jQuery renvoient des tableaux qui ne seront jamais égaux au sens d'égalité de référence.

En supposant:

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

cette:

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

retourne vrai.

142
Darin Dimitrov

Pour mémoire, jQuery a une fonction is() ):

a.is(b)

Notez que a est déjà une instance de jQuery.

324
e-motiv

Chaque fois que vous appelez la fonction jQuery (), un nouvel objet est créé et renvoyé. Ainsi, même les contrôles d'égalité sur les mêmes sélecteurs échoueront.

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

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

L'objet jQuery résultant contient un tableau d'éléments correspondants, qui sont essentiellement des objets DOM natifs tels que HTMLDivElement, qui font toujours référence au même objet. Vous devez donc vérifier leur égalité à l'aide de l'index de tableau suggéré par Darin.

$('#a')[0] == $('#a')[0] // true
13
Anurag
a.is(b)

et pour vérifier si elles ne sont pas une utilisation égale

!a.is(b)

pour ce qui est de

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

peut-être la classe ajoutée à l'élément ou supprimée après la première affectation

4
Jondi

Exemple aléatoire avec AirCoded de test "définir l'égalité" dans 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));
2
gnarf