Jawaban:
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;
};
var a = $('p');
var b = $('p');
if (a.equals(b)) {
// same set
}
$(':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:
alert($("#deviceTypeRoot")[0] == $("#deviceTypeRoot")[0]); //True
alert($("#deviceTypeRoot")[0] === $("#deviceTypeRoot")[0]);//True
karena $("#deviceTypeRoot")
juga mengembalikan array objek yang dipilih pemilih.
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:
JSON.stringify(a) == JSON.stringify(b)
Ini mungkin mahal, tetapi hal yang nyaman adalah bahwa itu secara implisit bersifat rekursif, sedangkan solusi yang elegan tidak.
Hanya 2 sen saya.
{a: 1, b: 2}
dan {b: 2, a: 1}
ini akan kembali false
kapan harus kembali true
.
Secara umum, adalah ide yang buruk untuk membandingkan $ (foo) dengan $ (foo) karena itu secara fungsional setara dengan perbandingan berikut:
<html>
<head>
<script language='javascript'>
function foo(bar) {
return ({ "object": bar });
}
$ = foo;
if ( $("a") == $("a") ) {
alert ("JS engine screw-up");
}
else {
alert ("Expected result");
}
</script>
</head>
</html>
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:
<html>
<head>
<script language='javascript'>
function foo(bar) {
return ({ "object": bar });
}
$ = foo;
if ( $("a").object == $("a").object ) {
alert ("Yep! Now it works");
}
else {
alert ("This should not happen");
}
</script>
</head>
</html>
Jadi sebenarnya Anda mungkin harus membandingkan elemen ID dari objek jQuery di program Anda yang sebenarnya
...
$(someIdSelector).attr("id") == $(someOtherIdSelector).attr("id")
lebih tepat.
Gunakan Underscore.js metode isEqual http://underscorejs.org/#isEqual
Pertama, pesan objek Anda berdasarkan kunci menggunakan fungsi ini
function sortObject(o) {
return Object.keys(o).sort().reduce((r, k) => (r[k] = o[k], r), {});
}
Kemudian, bandingkan versi string dari objek Anda, menggunakan funtion ini
function isEqualObject(a,b){
return JSON.stringify(sortObject(a)) == JSON.stringify(sortObject(b));
}
Berikut ini sebuah contoh
Mengasumsikan kunci objek diurutkan secara berbeda dan memiliki nilai yang sama
var obj1 = {"hello":"hi","world":"earth"}
var obj2 = {"world":"earth","hello":"hi"}
isEqualObject(obj1,obj2);//returns true
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.
A.selector === B.selector && A.context === B.context
. Seringkali konteksnya akan selalu sama, jadi kita hanya perlu mempertimbangkan pemilih.