如何判断两个jQuery对象是否相等?我想要在一个数组中查找特定的jQuery对象。
$.inArray(jqobj, my_array);//-1
alert($("#deviceTypeRoot") == $("#deviceTypeRoot"));//False
alert($("#deviceTypeRoot") === $("#deviceTypeRoot"));//False
自从jQuery 1.6版以后,你可以使用.is
方法。下面是一年前的回答...
var a = $('#foo');
var b = a;
if (a.is(b)) {
// the same object!
}
如果您想查看两个变量是否实际上是同一个对象,例如:
var a = $('#foo');
var b = a;
如果您需要检查它们的唯一ID,则可以检查它们的唯一ID。每次创建新的jQuery对象时,它都会获得一个ID。
if ($.data(a) == $.data(b)) {
// the same object!
}
虽然简单的 a === b
也可以达到相同的效果,但是上述做法可以让下一个开发者清楚地知道你正在测试什么。
无论如何,这可能不是你想要的。如果你想要检查两个不同的 jQuery 对象是否包含相同的元素集合,那么你可以使用以下代码:
$.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
}
如果你还不知道,你可以通过以下方式获得原始对象:
alert($("#deviceTypeRoot")[0] == $("#deviceTypeRoot")[0]); //True
alert($("#deviceTypeRoot")[0] === $("#deviceTypeRoot")[0]);//True
因为 $("#deviceTypeRoot")
也返回了选择器所选中的对象数组。
true
,因为您正在比较DOM元素的引用,==
与===
将给出相同的结果(不需要类型强制转换,它们只是两个对象引用)。 - Christian C. Salvadó$.fn.equals(...)
解决方案可能是最干净和最优雅的解决方案。"JSON.stringify(a) == JSON.stringify(b)
{a: 1, b: 2}
和 {b: 2, a: 1}
这两个对象,它会返回 false
,而实际上应该返回 true
。 - Eric Alberson<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>
当然,你永远不会期望“JS引擎出错”。我使用“$”只是为了清楚地说明jQuery正在做什么。
每当你调用$("#foo")时,实际上是在执行jQuery("#foo"),它会返回一个新对象。因此,比较它们并期望得到相同的对象是不正确的。
不过,你可以尝试像这样做:
<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>
因此,您应该比较实际程序中jQuery对象的ID元素,例如:
...
$(someIdSelector).attr("id") == $(someOtherIdSelector).attr("id")
标签。
首先,使用此函数根据键对您的对象进行排序
function sortObject(o) {
return Object.keys(o).sort().reduce((r, k) => (r[k] = o[k], r), {});
}
function isEqualObject(a,b){
return JSON.stringify(sortObject(a)) == JSON.stringify(sortObject(b));
}
这是一个例子
假设对象的键按不同顺序排序且具有相同的值
var obj1 = {"hello":"hi","world":"earth"}
var obj2 = {"world":"earth","hello":"hi"}
isEqualObject(obj1,obj2);//returns true
A.selector === B.selector && A.context === B.context
。通常上下文将始终相同,因此我们只需考虑选择器。 - Casebashequals
函数似乎是有顺序敏感性的。像 https://dev59.com/l10b5IYBdhLWcg3wENmK#29648479 这样的函数可以在更多情况下工作,尽管它速度较慢。 - Jayen