Signatur
Beschreibung
HTMLDivElement ist die DOM-Schnittstelle für jedes <div>-Element. Sie entsteht, wenn der Parser ein <div> im HTML findet, oder wenn du mit document.createElement("div") ein neues Element erzeugst. Einen eigenen Konstruktor, den man direkt aufrufen kann, gibt es nicht: new HTMLDivElement() wirft einen TypeError („Illegal constructor“).
Die Schnittstelle fügt kaum etwas Eigenes hinzu. Die einzige zusätzliche Eigenschaft ist align, und die ist veraltet. Alles, was man in der Praxis mit einem div macht, kommt über Vererbung von HTMLElement, Element, Node und EventTarget, zum Beispiel classList, dataset, style, textContent, append() oder addEventListener().
Wofür ist die Schnittstelle trotzdem nützlich?
- Typprüfung mit
instanceof HTMLDivElement, etwa in Event-Delegation oder Hilfsfunktionen - Typisierung in TypeScript bzw. JSDoc:
document.createElement("div")liefert automatisch den TypHTMLDivElement - Angepasste eingebaute Elemente (
class X extends HTMLDivElementzusammen mitcustomElements.define(..., { extends: "div" })). Safari unterstützt das allerdings nicht.
Ein div hat keine Semantik. Wenn es passende Elemente gibt, etwa <section>, <nav>, <button> oder <article>, sind diese für Barrierefreiheit und SEO meist die bessere Wahl.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $align | string | "" | Veraltet. Spiegelt das HTML-Attribut align wider ("left", "right", "center", "justify"). Stattdessen CSS verwenden (text-align, Flexbox, Grid). |
Rückgabewert
document.createElement("div"), cloneNode() oder Abfragen wie querySelector("div").Beispiele
div erzeugen und einfügen
const box = document.createElement("div");
box.className = "hinweis";
box.dataset.typ = "info";
box.textContent = "Speichern erfolgreich!";
document.body.append(box);
console.log(box instanceof HTMLDivElement);
console.log(box.outerHTML);
Typprüfung bei Event-Delegation
const liste = document.querySelector("#karten");
liste.addEventListener("click", (event) => {
const karte = event.target.closest(".karte");
if (karte instanceof HTMLDivElement) {
karte.classList.toggle("ausgewaehlt");
console.log(`Karte ${karte.dataset.id} umgeschaltet`);
}
});
Konstruktor ist nicht direkt aufrufbar
try {
const div = new HTMLDivElement();
} catch (err) {
console.log(err.name, err.message);
}
// Richtig:
const div = document.createElement("div");
console.log(div.constructor.name);
Veraltetes align durch CSS ersetzen
const alt = document.createElement("div");
alt.align = "center"; // veraltet
console.log(alt.getAttribute("align"));
const neu = document.createElement("div");
neu.style.textAlign = "center"; // empfohlen
console.log(neu.style.cssText);
// Wichtig · Fallstricke
- Kein direkter Konstruktor:
new HTMLDivElement()wirft einenTypeError. Nur innerhalb einer mitcustomElements.define()registrierten Unterklasse istsuper()erlaubt. alignist veraltet und sollte in neuem Code nicht mehr verwendet werden. Für Ausrichtung ist CSS zuständig.- Angepasste eingebaute Elemente (
extends HTMLDivElementmitis="...") gehen in Chromium und Firefox, aber nicht in Safari. Autonome Custom Elements (extends HTMLElement) sind die sicherere Wahl. - Barrierefreiheit: Ein anklickbares
divist weder per Tastatur fokussierbar noch hat es eine Rolle. Nimm besser<button>, oder ergänzetabindex,roleund Tastatur-Handler. - Sicherheit: Wenn du Inhalte über
innerHTMLeinsetzt, besteht XSS-Gefahr. Für Benutzereingaben isttextContentdie richtige Wahl. instanceofüber Frames hinweg: Elemente aus einemiframehaben ein anderes globalesHTMLDivElement, deshalb liefertinstanceofdortfalse. Als Alternative taugtel.tagName === "DIV".