remove after javascript dom jquery

javascript - after - Detecta objeto DOM frente a objeto jQuery



jquery selector (6)

Tengo una función que quiero permitir pasar en un objeto regular de elemento DOM de JavaScript o un objeto jQuery. Si aún no es un objeto jQuery, lo convertiré en uno.

¿Alguien sabe de una manera muy confiable de detectar esto?

function functionName(elm){ //Detect if elm is not a jquery object in condition if (elm) elm = $(elm); }

Un enfoque lógico es detectar una de las propiedades del objeto elemento DOM. La pregunta es, ¿qué propiedad sería la más confiable para detectar?

También podría convertirlo en un objeto jquery de cualquier forma, ya que jQuery no tiene un problema con algo como: $ ($ imajQueryObjAlready); Sin embargo, el propósito de esta pregunta no es simplemente resolver el problema, sino encontrar una buena manera de detectar si se trata de un objeto DOM frente a un objeto jQuery.


La forma más fácil es simplemente pasarlo a la función jQuery de cualquier manera. Si ya es un objeto jQuery, lo devolverá sin cambios:

function(elem){ elem = $(elem); ... }

Del código fuente de jQuery, esto es lo que está sucediendo:

if (selector.selector !== undefined) { this.selector = selector.selector; this.context = selector.context; } return jQuery.makeArray( selector, this );

Donde makeArray está fusionando el nuevo objeto jQuery (predeterminado) con el pasado en uno.


La manera con clase:

function is_jquery_object(x) { return window.jQuery && x instanceof jQuery; } function is_dom_object(x) { return window.HTMLElement && x instanceof HTMLElement; }

Basándose en la respuesta de @ karim79, si necesita asegurarse de que sea un objeto DOM o jQuery, use estas pruebas. (La prueba de window ayuda a la función a fallar correctamente si la clase no está definida, por ejemplo, no se pudo cargar jQuery).


Para probar un elemento DOM, puede verificar su propiedad nodeType :

if( elm.nodeType ) { // Was a DOM node }

o puede verificar la propiedad jQuery:

if( elm.jquery ) { // Was a jQuery object }


Para probar un objeto jQuery, puede usar el operador instanceof :

if(elm instanceof jQuery) { ... }

o:

if(elm instanceof $) { ... }


jQuery lo hace así:

if ( selector.nodeType )

(jQuery 1.4.3, línea 109)


elm instanceof jQuery es la forma más infalible, ya que probar elm.nodeType confundiría {nodeType:1} con un elemento DOM, y al probar elm.jquery se confundiría {jquery:$()} con un objeto jQuery, además de existir no hay garantía de que los objetos jQuery futuros no tengan una propiedad jquery .