如何确定JavaScript中HTML元素的类型?

Ada*_*utt 158 javascript dom

我需要一种方法来确定JavaScript中HTML元素的类型.它有id,但元素本身可以是div,表单字段,字段集等.我怎样才能实现这个目标?

pka*_*ing 251

nodeName是您正在寻找的属性.例如:

var elt = document.getElementById('foo');
console.log(elt.nodeName);
Run Code Online (Sandbox Code Playgroud)

请注意,nodeName返回元素名称大写且没有尖括号,这意味着如果要检查元素是否是<div>元素,可以按如下方式执行:

elt.nodeName == "DIV"
Run Code Online (Sandbox Code Playgroud)

虽然这不会给你预期的结果:

elt.nodeName == "<div>"
Run Code Online (Sandbox Code Playgroud)

  • 我建议这样做:if(elt.nodeName.toLowerCase()==="div"){...}这样,如果由于某种原因它不再以大写字母(小写或混合)返回,你将不必更改它,此代码仍然可以正常工作. (24认同)
  • 为了响应@TheCuBeMan,使用toLowerCase()意味着你还需要确保nodeName存在(如果它的所有可能的elt实际上不是一个元素):`if(elt.nodeName && elt.nodeName.toLowerCase() ==='div'){...}` (5认同)

Bri*_*ine 40

怎么样element.tagName

另请参阅tagNameMDN上的文档.

  • 从QuirksMode:我的建议是根本不使用tagName.nodeName包含tagName的所有功能,以及更多功能.因此nodeName始终是更好的选择. (24认同)
  • 根据时间戳,你击败我不到1秒! (4认同)
  • https://www.quirksmode.org/dom/core/#t23 看起来 `nodeName` 除了标签/元素之外还提供了属性、文本和注释节点的名称。我相信 `localName` 来自 XML API。如果您知道自己总是在处理一个元素,那么可能没有太大区别,但“nodeName”是更通用的选项。 (2认同)

Cod*_*4R7 20

您可以通过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
Run Code Online (Sandbox Code Playgroud)

看看这里的接口的完整列表。


gol*_*pot 9

有时你想要 element.constructor.name

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

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

document.createElement('foo').constructor.name
// HTMLUnknownElement
Run Code Online (Sandbox Code Playgroud)