Seit jQuery 1.6 können Sie verwenden .is
. Unten ist die Antwort von vor über einem Jahr ...
var a = $('#foo');
var b = a;
if (a.is(b)) {
// the same object!
}
Wenn Sie sehen möchten, ob zwei Variablen tatsächlich dasselbe Objekt sind, z.
var a = $('#foo');
var b = a;
... dann können Sie ihre eindeutigen IDs überprüfen. Jedes Mal, wenn Sie ein neues jQuery-Objekt erstellen, erhält es eine ID.
if ($.data(a) == $.data(b)) {
// the same object!
}
Obwohl das gleiche mit einem einfachen a === b
erreicht werden könnte, könnte das Obige zumindest dem nächsten Entwickler genau zeigen, worauf Sie testen.
Auf jeden Fall ist das wahrscheinlich nicht das, wonach Sie suchen. Wenn Sie überprüfen möchten, ob zwei verschiedene jQuery-Objekte denselben Satz von Elementen enthalten, können Sie Folgendes verwenden:
$.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;
};
Quelle
var a = $('p');
var b = $('p');
if (a.equals(b)) {
// same set
}
A.selector === B.selector && A.context === B.context
. Oft ist der Kontext immer der gleiche, daher müssen wir nur den Selektor berücksichtigen.$(':first')
und$('*:first')
equals
Funktion scheint auftragsabhängig zu sein. So etwas wie stackoverflow.com/a/29648479 würde in mehr Fällen funktionieren, obwohl es langsamer ist.Wenn Sie es immer noch nicht wissen, können Sie das ursprüngliche Objekt zurückerhalten, indem Sie:
da gibt
$("#deviceTypeRoot")
auch ein Array von Objekten zurück, die der Selektor ausgewählt hat.quelle
true
, da Sie die Referenz des DOM-Elements vergleichen.==
Vs===
gibt Ihnen die gleichen Ergebnisse (kein Typzwang erforderlich, es handelt sich nur um zwei Objektreferenzen)Die
$.fn.equals(...)
Lösung ist wahrscheinlich die sauberste und eleganteste.Ich habe so etwas schnelles und schmutziges ausprobiert:
Es ist wahrscheinlich teuer, aber das Bequeme ist, dass es implizit rekursiv ist, während die elegante Lösung dies nicht ist.
Nur meine 2 Cent.
quelle
{a: 1, b: 2}
und{b: 2, a: 1}
dies wird zurückkehren,false
wenn es zurückkehren solltetrue
.Es ist im Allgemeinen eine schlechte Idee, $ (foo) mit $ (foo) zu vergleichen, da dies funktional dem folgenden Vergleich entspricht:
Natürlich würde man nie erwarten, dass "JS-Motor versaut". Ich benutze "$", um zu verdeutlichen, was jQuery tut.
Immer wenn Sie $ ("# foo") aufrufen, führen Sie tatsächlich eine jQuery ("# foo") aus, die ein neues Objekt zurückgibt . Es ist also nicht korrekt, sie zu vergleichen und dasselbe Objekt zu erwarten.
Was Sie jedoch tun können, ist Folgendes:
Also wirklich sollten Sie vielleicht die ID-Elemente der jQuery-Objekte in Ihrem realen Programm vergleichen, also so etwas wie
ist angemessener.
quelle
Verwenden Sie die Methode Underscore.js isEqual http://underscorejs.org/#isEqual
quelle
Bestellen Sie Ihr Objekt zunächst anhand des Schlüssels mit dieser Funktion
Vergleichen Sie dann die stringifizierte Version Ihres Objekts mit dieser Funktion
Angenommen, Objektschlüssel sind unterschiedlich geordnet und haben dieselben Werte
quelle
Wenn Sie überprüfen möchten, ob der Inhalt gleich ist oder nicht, verwenden Sie einfach JSON.stringify (obj).
ZB - var a = {key: val};
var b = {key: val};
JSON.stringify (a) == JSON.stringify (b) -----> Wenn der Inhalt gleich ist, werden Sie wahr.
quelle