Sejak jQuery 1.6, Anda dapat menggunakan .is
. Di bawah ini adalah jawaban dari lebih dari setahun yang lalu ...
var a = $('#foo');
var b = a;
if (a.is(b)) {
// the same object!
}
Jika Anda ingin melihat apakah dua variabel sebenarnya objek yang sama, misalnya:
var a = $('#foo');
var b = a;
... maka Anda dapat memeriksa ID unik mereka. Setiap kali Anda membuat objek jQuery baru, ia mendapat id.
if ($.data(a) == $.data(b)) {
// the same object!
}
Padahal, hal yang sama dapat dicapai dengan sederhana a === b
, di atas mungkin setidaknya menunjukkan pengembang berikutnya persis apa yang Anda uji.
Bagaimanapun, itu mungkin bukan yang Anda cari. Jika Anda ingin memeriksa apakah dua objek jQuery berbeda berisi set elemen yang sama, Anda bisa menggunakan ini:
$.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;
};
Sumber
var a = $('p');
var b = $('p');
if (a.equals(b)) {
// same set
}
A.selector === B.selector && A.context === B.context
. Seringkali konteksnya akan selalu sama, jadi kita hanya perlu mempertimbangkan pemilih.$(':first')
dan$('*:first')
equals
fungsi Anda tampaknya peka terhadap pesanan. sesuatu seperti stackoverflow.com/a/29648479 akan berfungsi dalam lebih banyak kasus, meskipun lebih lambat.Jika Anda masih tidak tahu, Anda bisa mendapatkan kembali objek aslinya dengan:
karena
$("#deviceTypeRoot")
juga mengembalikan array objek yang dipilih pemilih.sumber
true
, karena Anda membandingkan referensi elemen DOM,==
vs===
akan memberi Anda hasil yang sama (tidak ada paksaan jenis yang diperlukan, mereka hanya dua referensi objek)The
$.fn.equals(...)
solusi adalah mungkin yang paling bersih dan paling elegan.Saya telah mencoba sesuatu yang cepat dan kotor seperti ini:
Ini mungkin mahal, tetapi hal yang nyaman adalah bahwa itu secara implisit bersifat rekursif, sedangkan solusi yang elegan tidak.
Hanya 2 sen saya.
sumber
{a: 1, b: 2}
dan{b: 2, a: 1}
ini akan kembalifalse
kapan harus kembalitrue
.Secara umum, adalah ide yang buruk untuk membandingkan $ (foo) dengan $ (foo) karena itu secara fungsional setara dengan perbandingan berikut:
Tentu saja Anda tidak akan pernah mengharapkan "JS engine screw-up". Saya menggunakan "$" hanya untuk memperjelas apa yang sedang dilakukan jQuery.
Setiap kali Anda menelepon $ ("# foo"), Anda benar-benar melakukan jQuery ("# foo") yang mengembalikan objek baru . Jadi membandingkan mereka dan mengharapkan objek yang sama tidak benar.
Namun apa yang BISA Anda lakukan adalah sesuatu seperti:
Jadi sebenarnya Anda mungkin harus membandingkan elemen ID dari objek jQuery di program Anda yang sebenarnya
lebih tepat.
sumber
Gunakan Underscore.js metode isEqual http://underscorejs.org/#isEqual
sumber
Pertama, pesan objek Anda berdasarkan kunci menggunakan fungsi ini
Kemudian, bandingkan versi string dari objek Anda, menggunakan funtion ini
Mengasumsikan kunci objek diurutkan secara berbeda dan memiliki nilai yang sama
sumber
Jika Anda ingin memeriksa isinya sama atau tidak, gunakan JSON.stringify (obj)
Misalnya - var a = {key: val};
var b = {key: val};
JSON.stringify (a) == JSON.stringify (b) -----> Jika isinya sama, Anda menjadi benar.
sumber