Depuis jQuery 1.6, vous pouvez utiliser .is
. Voici la réponse d'il y a plus d'un an ...
var a = $('#foo');
var b = a;
if (a.is(b)) {
// the same object!
}
Si vous voulez voir si deux variables sont réellement le même objet, par exemple:
var a = $('#foo');
var b = a;
... alors vous pouvez vérifier leurs identifiants uniques. Chaque fois que vous créez un nouvel objet jQuery, il obtient un identifiant.
if ($.data(a) == $.data(b)) {
// the same object!
}
Bien que la même chose puisse être obtenue avec un simple a === b
, ce qui précède pourrait au moins montrer au prochain développeur exactement ce que vous testez.
En tout cas, ce n'est probablement pas ce que vous recherchez. Si vous souhaitez vérifier si deux objets jQuery différents contiennent le même ensemble d'éléments, vous pouvez utiliser ceci:
$.fn.equals = function(compareTo) {
if (!compareTo || this.length != compareTo.length) {
return false;
}
for (var i = 0; i < this.length; ++i) {
if (this[i] !== compareTo[i]) {
return false;
}
}
return true;
};
La source
var a = $('p');
var b = $('p');
if (a.equals(b)) {
// same set
}
A.selector === B.selector && A.context === B.context
. Souvent, le contexte sera toujours le même, il suffit donc de considérer le sélecteur.$(':first')
et$('*:first')
equals
fonction semble être sensible à l'ordre. quelque chose comme stackoverflow.com/a/29648479 fonctionnerait dans plus de cas, bien que ce soit plus lent.Si vous ne savez toujours pas, vous pouvez récupérer l'objet d'origine en:
car
$("#deviceTypeRoot")
renvoie également un tableau d'objets que le sélecteur a sélectionnés.la source
true
, car vous comparez la référence de l'élément DOM,==
vs===
vous donneront les mêmes résultats (aucune contrainte de type nécessaire, ce ne sont que deux références d'objet)La
$.fn.equals(...)
solution est probablement la plus propre et la plus élégante.J'ai essayé quelque chose de rapide et sale comme celui-ci:
C'est probablement cher, mais ce qui est confortable, c'est qu'il est implicitement récursif, alors que la solution élégante ne l'est pas.
Juste mes 2 cents.
la source
{a: 1, b: 2}
et{b: 2, a: 1}
cela reviendrafalse
quand il devrait revenirtrue
.C'est, d'une manière générale, une mauvaise idée de comparer $ (foo) avec $ (foo) car cela est fonctionnellement équivalent à la comparaison suivante:
Bien sûr, vous ne vous attendriez jamais à une "erreur du moteur JS". J'utilise "$" juste pour clarifier ce que fait jQuery.
Chaque fois que vous appelez $ ("# foo"), vous faites en fait un jQuery ("# foo") qui renvoie un nouvel objet . Donc, les comparer et attendre le même objet n'est pas correct.
Cependant, ce que vous POUVEZ faire peut être quelque chose comme:
Donc, vraiment, vous devriez peut-être comparer les éléments ID des objets jQuery dans votre programme réel, donc quelque chose comme
est plus approprié.
la source
Utilisez la méthode Underscore.js isEqual http://underscorejs.org/#isEqual
la source
Commencez par commander votre objet en fonction de la clé en utilisant cette fonction
Ensuite, comparez la version stringifiée de votre objet, en utilisant cette fonction
En supposant que les clés des objets sont ordonnées différemment et ont les mêmes valeurs
la source
Si vous voulez vérifier que le contenu est égal ou non, utilisez simplement JSON.stringify (obj)
Par exemple - var a = {clé: val};
var b = {clé: val};
JSON.stringify (a) == JSON.stringify (b) -----> Si le contenu est le même, vous obtenez vrai.
la source