Como posso determinar o tipo de um elemento HTML em JavaScript?


191

Eu preciso de uma maneira de determinar o tipo de um elemento HTML em JavaScript. Ele possui o ID, mas o elemento em si pode ser a <div>, um <form>campo, um <fieldset>etc. Como posso conseguir isso?

Respostas:


290

nodeNameé o atributo que você está procurando. Por exemplo:

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

Observe que nodeNameretorna o nome do elemento em maiúsculas e sem os colchetes angulares, o que significa que, se você quiser verificar se um elemento é um <div>elemento, poderá fazê-lo da seguinte maneira:

elt.nodeName == "DIV"

Embora isso não lhe dê os resultados esperados:

elt.nodeName == "<div>"

29
Eu recomendo fazer assim: if (elt.nodeName.toLowerCase () === "div") {...} Dessa forma, se por algum motivo ele não for mais retornado em letras maiúsculas (minúsculas ou mistas), você não precisará alterá-lo e esse código ainda funcionará bem.
TheCuBeMan

6
Em resposta a @TheCuBeMan, usando toLowerCase () significa que você também precisa ter certeza existe nodeName (se for de todo possível elt não é, de fato, um elemento):if (elt.nodeName && elt.nodeName.toLowerCase() === 'div') { ... }
Erik Koopmans

que tal localName?
bomba


7

As vezes voce quer element.constructor.name

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

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

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

7

Você pode usar a inspeção de código genérico 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

Procure aqui uma lista completa de interfaces.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.