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
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.
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
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
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));