2010-07-04 5 views
3

J'écris un plugin pour jQuery et je veux que l'utilisateur puisse transmettre des données au plugin sous n'importe quelle forme. J'ai le problème de JSON ou de tableau élaboré, mais j'ai du mal à essayer de déterminer si les données sont un objet jQuery.Détection de l'objet 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 

La dernière méthode retourne vrai, mais il n'y a aucune garantie que l'utilisateur utilise une balise LI pour leurs données, donc je pense que je besoin de quelque chose comme ceci:

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

Est-ce que quelqu'un connait un meilleure méthode?

+0

Apparemment, il existe un plugin Ben Alman pour cela - http://benalman.com/projects/jquery-misc-plugins/#isjquery – Mottie

Répondre

9

L'objet jQuery (ou son alias $) est un constructor function brut, tous les objets jQuery héritent de l'objet jQuery.prototype (ou son alias jQuery.fn).

Vous pouvez vérifier si un objet existe dans la chaîne prototype d'un autre objet, en utilisant soit l'opérateur instanceof ou la méthode isPrototypeOf, par exemple:

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

Ou:

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

+1 Plus approfondi que ma réponse. –

+0

Génial! Merci! – Mottie

+0

@fudgey: De rien, @Ken: Merci! – CMS

1

L'objet jQuery est simplement une collection d'éléments, stockés en tant que tableau, avec des fonctions supplémentaires et des éléments attachés. Donc, essentiellement, vous pouvez utiliser les éléments jQuery exactement comme vous le feriez avec un tableau normal.

+1

Salut merci pour la réponse, oui je sais que l'objet jQuery est stocké comme un tableau d'objets, mais j'essaie de trouver un moyen facile de le différencier de autres. – Mottie

+0

Ah d'accord, je recommanderais d'essayer la solution @ CMS alors. –

1

Comment about:

var isJq = data instanceof jQuery; 
Questions connexes