2011-01-21 21 views
25

Tengo una función:¿Cómo comprobar si el objeto es un elemento DOM?

function Check(o) 
{ 
    alert(/* o is a DOM element ? "true" : "false" */); 
} 

¿Cómo puedo comprobar si el parámetro o es un objeto DOM o no?

+0

Cualquier nodo DOM o un tipo particular de nodo? – user113716

+0

@patrick Cualquiera. Para buscar uno específico, simplemente podría verificar tagName ¿verdad? – BrunoLM

+0

No, el 'tagName' dará el tipo de un elemento" tipo 1 ". Hay muchos otros tipos de nodos. – user113716

Respuesta

45

Un elemento DOM implementa la interfaz Element. Por lo que podría hacer:

function Check(o) { 
    alert(o instanceof Element); 
} 
+5

Esta es la mejor respuesta hasta el momento. – geoyws

22

Compruebe si existe la propiedad nodeName.

Básicamente comprobar si es un Node: mira el DOM lvl 1 specs, comprueba la definición del nodo.

Si decía literalmente cuando dijo Element cheque por tagName propiedad, mira el Definición de elementos de la misma especificación

Así que para recapitular, realice una

function Check(o) 
{ 
    alert(o.tagName ? "true" : "false"); 
} 

para comprobar si se trata de una DOM Elemento o

function Check(o) 
{ 
    alert(o.nodeName ? "true" : "false"); 
} 

para comprobar si se trata de un nodo DOM

+0

o 'nodeType', o lo que sea, es una propiedad del objeto raíz' DOMElement'. –

+5

Esto no suena a prueba de balas. ¿Qué pasa si hay un objeto con ese nombre de propiedad? ¿Es esa la única forma? Pensé que podría haber algo más ... – BrunoLM

+1

Bueno, puede hacer que sea más seguro comprobando todas (o al menos dos o tres) las propiedades y métodos que esos objetos necesitan para cumplir con las especificaciones, pero parece exagerado ... –

0

Usted puede usar la siguiente función

function isNode(o) 
{ 
    return o && 'nodeType' in o; 
} 
+1

Creo que debería ser ''nodeType' en o', pero ¡buena idea! –

+0

@BenRowe: Nate Barr tiene razón, ''nodeType'' debe estar entre comillas, si no, su código lleva a _" ReferenceError: nodeType is not defined "_, ¡por favor edite su publicación! – Sk8erPeter

+0

Gracias, haré el ajuste –

9

En lugar de sólo la comprobación de la existencia de una propiedad, me gustaría comprobar su valor específico.

Esto supone que está buscando un elemento "tipo 1".

nodeType at MDC(docs)

function Check(o) { 
    alert(o && o.nodeType && o.nodeType === 1); 
} 

Aún se podía obtener un objeto que tiene la propiedad nodeType que no es en realidad un nodo DOM, pero también tendría que tener un valor coincidente de 1 para dar un falso positivo.

+3

Una versión más corta sería: obj && obj.nodeType === 1 – Meglio

0

se puede comprobar si un nodo DOM es un elemento con JQuery:

element.is("*") 
Cuestiones relacionadas