229 votes

Comment puis-je déterminer le type d'un élément HTML en JavaScript ?

J'ai besoin d'un moyen de déterminer le type d'un élément HTML en JavaScript. Il a l'ID, mais l'élément lui-même pourrait être un <div> , a <form> champ, un <fieldset> etc. Comment puis-je y parvenir ?

347voto

pkaeding Points 12935

nodeName est l'attribut que vous recherchez. Par exemple :

var elt = document.getElementById('foo');
console.log(elt.nodeName);

Notez que nodeName retourne le nom de l'élément en majuscules et sans les crochets, ce qui signifie que si vous voulez vérifier si un élément est un <div> vous pourriez le faire comme suit :

elt.nodeName == "DIV"

Bien que cela ne vous donne pas les résultats escomptés :

elt.nodeName == "<div>"

36 votes

Je recommande de procéder comme suit : if(elt.nodeName.toLowerCase() === "div") { ... } De cette façon, si pour une raison quelconque, il n'est plus renvoyé en majuscules (minuscules ou mixte), vous n'aurez pas à le modifier et ce code fonctionnera toujours bien.

10 votes

En réponse à @TheCuBeMan, l'utilisation de toLowerCase() signifie que vous devez également vous assurer que nodeName existe (s'il est possible que elt ne soit pas, en fait, un élément) : if (elt.nodeName && elt.nodeName.toLowerCase() === 'div') { ... }

0 votes

Qu'en est-il localName ?

54voto

Brian Cline Points 8904

Qu'en est-il element.tagName ?

Voir aussi tagName Documents sur MDN .

6 votes

D'après les timestamps, vous me battez de moins d'une seconde !

30 votes

De QuirksMode : Mon conseil est de ne pas utiliser le tagName du tout. nodeName contient toutes les fonctionnalités du tagName, plus quelques autres. Par conséquent, nodeName est toujours le meilleur choix.

19voto

Code4R7 Points 1366

Vous pouvez utiliser l'inspection de code générique via instanceof :

var e = document.getElementById('#my-element');
if (e instanceof HTMLInputElement) {}         // <input>
elseif (e instanceof HTMLSelectElement) {}    // <select>
elseif (e instanceof HTMLTextAreaElement) {}  // <textarea>
elseif (  ... ) {}                            // any interface

Regardez ici pour une liste complète des interfaces.

9voto

golopot Points 1851

Parfois, vous voulez element.constructor.name

document.createElement('div').constructor.name
// HTMLDivElement

document.createElement('a').constructor.name
// HTMLAnchorElement

document.createElement('foo').constructor.name
// HTMLUnknownElement

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X