2011-01-21 2 views
25

J'ai une fonction:Comment vérifier si l'objet est un élément DOM?

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

Comment puis-je vérifier si le paramètre o est un objet DOM ou non?

+0

N'importe quel noeud DOM ou un type particulier de noeud? – user113716

+0

@patrick Tout. Pour vérifier un spécifique je pourrais juste vérifier le tagName droit? – BrunoLM

+0

Non, le 'tagName' donnera le type d'un élément" type 1 ". Il existe plusieurs autres types de nœuds. – user113716

Répondre

45

Un élément DOM implémente l'interface Element. Ainsi, vous pouvez faire:

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

Ceci est la meilleure réponse jusqu'à présent. – geoyws

22

Vérifiez que la propriété nodeName existe.

Vérifiez fondamentalement s'il s'agit d'un Node: regardez le DOM lvl 1 specs, vérifiez la définition du nœud.

Si vous vouliez dire littéralement quand vous avez dit Element chèque tagName propriété, regardez la définition des éléments de la même spécification

Pour résumer, procédez

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

pour vérifier si elle est Element DOM ou

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

pour vérifier si elle est un nœud DOM

+0

ou 'nodeType', ou tout autre élément est une propriété de l'objet racine' DOMElement'. –

+5

Cela ne sonne pas pare-balles. Que faire s'il y a un objet avec ce nom de propriété? Est-ce le seul moyen? Je pensais qu'il pourrait y avoir autre chose ... – BrunoLM

+1

Eh bien, vous pouvez le rendre plus sûr en vérifiant tous (ou au moins deux ou trois) des propriétés et méthodes que ces objets doivent avoir à la hauteur de la spécification, mais il semble que trop ... –

0

Vous pouvez utiliser la fonction suivante

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

Je crois qu'il devrait être «nodeType» dans o', mais belle idée propre! –

+0

@BenRowe: Nate Barr a raison, '' nodeType'' devrait être entre guillemets, sinon, votre code mène à _ "ReferenceError: nodeType n'est pas défini" _, donc s'il vous plaît éditez votre message! – Sk8erPeter

+0

Merci, je vais faire l'ajustement –

9

Au lieu de simplement vérifier l'existence d'une propriété, je vérifierais sa valeur spécifique.

Ceci suppose que vous êtes à la recherche d'un élément "type 1".

nodeType at MDC(docs)

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

Vous pouvez toujours obtenir un objet qui a la propriété nodeType qui ne sont pas en fait un nœud DOM, mais il faudrait aussi avoir une valeur correspondante de 1 pour donner un faux positif.

+3

Une version plus courte serait: obj && obj.nodeType === 1 – Meglio

0

Vous pouvez vérifier si un nœud DOM est un élément avec JQuery:

element.is("*") 
Questions connexes