2012-05-23 14 views
8

Quiero crear una función que se pueda usar con Id o al pasar el objeto jQuery.Cómo detectar el argumento objeto jQuery

var $myVar = $('#myId'); 

myFunc($myVar); 
myFunc('myId'); 

function myFunc(value) 
{ 
    // check if value is jQuery or string 
} 

¿Cómo puedo detectar qué tipo de argumento se pasó a la función?

Nota!This pregunta no es lo mismo. No quiero pasar cadena de selector como #id.myClass. Quiero pasar el objeto jQuery como en el ejemplo.

+4

Un objeto jQuery no es un "selector jQuery"; es un objeto. Un ** selector ** es una cadena con sintaxis de selector de CSS. – Pointy

+0

@Pointy Buen punto, cambiado – Tx3

+0

Si desea detectar un objeto jQuery, entonces [la parte de esa publicación que dice 'valor instancia de jQuery'] (http://stackoverflow.com/a/6283431/575527) (le mans: detección de una instancia de objeto jQuery) sería la respuesta. – Joseph

Respuesta

15

Use el operador typeof

if (typeof value === 'string') { 
    // it's a string 
} else { 
    // it's something else 
} 

o para hacer realmente seguro de que es una instancia del objeto jQuery

if (typeof value === 'string') { 
    // it's a string 
} else if (value instanceof $) { 
    // it's a jQuery object 
} else { 
    // something unwanted 
} 
+1

Al menos las pruebas rápidas muestran que 'value instanceof $' funciona sin problemas. Esto era lo que estaba buscando. ¡Gracias! – Tx3

0

¿No sería suficiente para comprobar el tipo del argumento?

function myfunc(arg) 
{ 
    if(typeof arg == 'string') 
    { 

    } 
    else if(typeof arg == 'object') 
    { 

    } 
} 

Compruebe esto Fiddle.

+0

Esto no considera nulo, que también tiene typeof = "object". – Marc

0
function myFunc(value) 
{ 
    if (typeof value == "string") { 
     //it's a string 
    } 
    else if (value != null && typeof value == "object"} { 
     //it's an object (presumably jQuery object) 
    } 
    else { 
     //it's null or something else 
    } 


} 
+0

'typeof value' nunca será' null'. ¿Querías decir 'value! = Null'? –

+0

@JamesAllardice, sí, eso es lo que quise decir. Arreglado. Gracias. – Marc

0

Prueba esto:

function myFunc(value) 
{ 
    if(typeof value === 'object') { 
    } 
    else{ 
    } 
} 
0
function myFunc(value) 
{ 
    if(typeof(value) == 'string') 
    //this is a string 
    else if (value === jQuery) 
    //this is jQuery 
    else if (typeof(value) == 'object') 
    //this is an object 
} 

NOTA: hizo esto en la consola:

> jQuery 
function (a,b){return new e.fn.init(a,b,h)} 
> var value = jQuery 
undefined 
> value 
function (a,b){return new e.fn.init(a,b,h)} 
> value === jQuery 
true 
+0

value === jQuery da falso para el objeto jQuery – Tx3

+1

'value === jQuery' solo será verdadero para jQuery, no para instancias de este. Desea el operador 'instanceof'. @RGB: tenga en cuenta que 'typeof' es un operador, no una función, por lo que no necesita los paréntesis (no causará ningún problema, pero puede ser más claro sin ellos). –

+0

uhh, sí lo hace ...: P, pero veo que tienes una solución :) – RGB

3

Cada objeto tiene una propiedad jQuery jquery. Esto va a fracasar, por supuesto, si el objeto tiene la propiedad jquery ... pero usted puede tener la comprobación estricta si quieres ...

function(o) { 
    if(typeof o == 'object' && o.jquery) // it's jquery object. 
} 
0

Trate de usar typeof, por ejemplo:

var $myVar = $('#myId'); 

myFunc($myVar); 
myFunc('myId'); 

function myFunc(value){ 
    // check if value is jQuery or string 
    switch(typeof value) { 
     case 'object': 
     // is object 
     break; 

     case 'string': 
     // is string 
     break; 

     // etc etc. 
    } 
} 
Cuestiones relacionadas