2010-07-04 83 views
3

我正在为jQuery编写一个插件,我想使它成为用户可以以任何形式将数据传递给插件。我有JSON或数组问题解决,但我无法确定数据是否是jQuery对象。检测jQuery对象

data = $('#list li'); 
console.debug($.isPlainObject(data)); // false 
console.debug($.isArray(data));   // false 
console.debug(data[0].tagName == "LI"); // true, but see note below 

的最后一个方法返回true,但不能保证用户使用其数据的LI标签,所以我想我需要的东西是这样的:

if ($.isjQueryObject(data)) { /* do something */ } 

有谁知道更好的方法?

+0

显然,有一个本阿曼插件 - http:///benalman.com/projects/jquery-misc-plugins/#isjquery – Mottie 2010-10-09 16:25:34

回答

9

jQuery物体(或其别名$)是一个纯constructor function,所有的jQuery对象从jQuery.prototype对象(或其别名jQuery.fn)继承。

您可以检查是否在其他对象的原型链中存在的对象,通过使用该instanceof运营商或isPrototypeOf方法,例如:

function isjQueryObject(obj) { 
    return obj instanceof jQuery; 
} 

或者:

function isjQueryObject(obj) { 
    return jQuery.fn.isPrototypeOf(obj); 
} 
+0

+1比我的回答更彻底。 – 2010-07-04 01:57:09

+0

太棒了!谢谢! – Mottie 2010-07-04 02:01:33

+0

@fudgey:不客气,@Ken:谢谢! – CMS 2010-07-04 02:30:05

1

jQuery对象只是一个元素的集合,作为一个数组存储,附加了附加的函数和内容。所以基本上你可以像使用常规数组一样使用jQuery元素。

+1

嗨,感谢您的回应,是的,我知道jQuery对象存储为一个对象数组,但我试图找到一种简单的方法来区分它其他。 – Mottie 2010-07-04 01:47:12

+0

啊好吧,我建议尝试@ CMS的解决方案。 – 2010-07-04 01:54:56

1

如何约:

var isJq = data instanceof jQuery;