2010-07-04 94 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;