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