jQuery对象相等

我如何确定两个jQuery对象是否相等? 我想能够search一个特定的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! } 

如果你想看看两个variables实际上是相同的对象,例如:

 var a = $('#foo'); var b = a; 

…那么你可以检查他们的唯一ID。 每次创build一个新的jQuery对象时,都会得到一个id。

 if ($.data(a) == $.data(b)) { // the same object! } 

尽pipe如此,使用简单的a === b也可以达到同样的效果,上面的代码至less可以向下一个开发者展示你正在testing的内容。

无论如何,这可能不是你所追求的。 如果你想检查两个不同的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")也返回select器所选对象的数组。

$.fn.equals(...)解决scheme可能是最干净和最优雅的一个。

我已经尝试过这样快速和肮脏的东西:

 JSON.stringify(a) == JSON.stringify(b) 

这可能是昂贵的,但舒服的是它是隐式recursion的,而优雅的解决scheme则不是。

只是我2美分。

一般来说,将$(foo)与$(foo)进行比较是一个好主意,因为它在function上等同于以下比较:

 <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") 

是比较合适的。

使用Underscore.js isEqual方法http://underscorejs.org/#isEqual

Interesting Posts