Wie kann ich den Typ eines HTML-Elements in JavaScript bestimmen?


189

Ich brauche eine Möglichkeit, den Typ eines HTML-Elements in JavaScript zu bestimmen. Es hat die ID, aber das Element selbst kann ein <div>, ein <form>Feld, ein <fieldset>usw. sein. Wie kann ich dies erreichen?

Antworten:


290

nodeNameist das Attribut, nach dem Sie suchen. Beispielsweise:

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

Beachten Sie, dass nodeNameder Elementname groß und ohne spitze Klammern zurückgegeben wird. Wenn Sie also überprüfen möchten, ob ein Element ein Element ist <div>, können Sie dies wie folgt tun:

elt.nodeName == "DIV"

Dies würde Ihnen zwar nicht die erwarteten Ergebnisse bringen:

elt.nodeName == "<div>"

29
Ich empfehle, dies folgendermaßen zu tun: if (elt.nodeName.toLowerCase () === "div") {...} Auf diese Weise, wenn es aus irgendeinem Grund nicht mehr in Großbuchstaben (Kleinbuchstaben oder gemischt) zurückgegeben wird, Sie muss es nicht ändern und dieser Code wird immer noch gut funktionieren.
TheCuBeMan

6
Als Antwort auf @TheCuBeMan bedeutet die Verwendung von toLowerCase (), dass Sie auch sicherstellen müssen, dass nodeName vorhanden ist (wenn es überhaupt möglich ist, ist elt tatsächlich kein Element):if (elt.nodeName && elt.nodeName.toLowerCase() === 'div') { ... }
Erik Koopmans

was ist mit localName?
Bomba


7

Manchmal willst du element.constructor.name

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

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

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

6

Sie können die generische Codeüberprüfung verwenden über 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

Schauen Sie hier für eine vollständige Liste der Schnittstellen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.