Document Object Model

DOM Document Object Model

Glossary

The Document Object Model (short: DOM) is the programmatic interface through which a browser represents the structure and content of an HTML or XML document as a tree structure in memory. Every HTML element becomes a node in this tree. The DOM is the decisive bridge between the static HTML source and JavaScript: only via the DOM can scripts access elements, change them, add new ones or react to user interactions.

How does the DOM come about?

As soon as a browser receives HTML, it parses it line by line, building the DOM tree node by node; in parallel, the CSSOM (CSS Object Model) emerges from the CSS. Only the combination of the two yields the so-called render tree, from which the browser finally calculates the visible layout and draws the pixels. The DOM is thus not a static image of the original source but a living state that evolves with every JavaScript change.

Structure of a DOM tree (example)

From this simple HTML snippet

<body>
  <h1>Welcome</h1>
  <p>A short text.</p>
</body>

the browser builds the following tree structure:

body
├── h1 → "Welcome"
└── p → "A short text."

Here body is the parent node of h1 and p, which in turn are sibling nodes. It’s exactly these parent-child relationships that JavaScript and CSS navigate through the document.

The most important DOM methods at a glance

MethodPurposeExample
document.querySelector()Find the first matching element by CSS selectordocument.querySelector('.card')
document.getElementById()Find an element by IDdocument.getElementById('header')
element.addEventListener()React to events (click, input, …)btn.addEventListener('click', fn)
document.createElement()Create a new nodedocument.createElement('div')
element.appendChild()Insert a node as a childparent.appendChild(newElement)
element.classListRead, set, toggle CSS classesel.classList.toggle('active')

DOM manipulation with JavaScript

Through these and other DOM APIs, JavaScript doesn’t just read content but also changes it live: updating text, toggling classes, showing, hiding or newly creating entire elements – all without reloading the page. It’s exactly this capability that makes modern, interactive web applications possible in the first place, from a simple accordion to a complex single-page application.

Virtual DOM vs. signals: the 2026 trend

Direct DOM manipulations are comparatively expensive. Frameworks like React classically solve this via a virtual DOM: changes are first computed in a lightweight JavaScript representation, compared with the previous state (diffing) and only then transferred to the real DOM in batches.

The trend of recent years, however, points in a different direction: signals (fine-grained reactivity). Instead of recomputing and comparing a whole component on every state change, frameworks like Solid, Vue 3, Svelte 5 (via “runes”) and Angular tie state directly to the affected DOM nodes, with no intermediate step through a virtual representation. That reduces unnecessary computation and is noticeably faster in benchmarks. React nevertheless remains the most widespread standard with the largest ecosystem – the choice of the right approach always depends on the concrete project, a topic we assess individually as part of our custom software development.

Easy to confuse, but a concept in its own right: the shadow DOM encapsulates a DOM subtree, including its own styles, from the rest of the page. This is the foundation of the web components specification. The native <video> element, for instance, brings its controls along via shadow DOM without page CSS accidentally overriding them. On our own website we deliberately use native custom elements without shadow DOM, so that global CSS classes and design tokens continue to apply uniformly – encapsulation isn’t always the goal.

DOM and performance: reflow and repaint

If JavaScript changes a property affecting an element’s layout or size, the browser must perform a reflow: the positions of affected and often neighbouring elements are recalculated, followed by a repaint. If many such changes are made individually instead of batched, these costs add up noticeably. Proven countermeasures are batching DOM changes, avoiding repeated read-write alternation within the same frame, and CSS properties that trigger no reflow (e.g. transform instead of top/left).

DOM and SEO

The DOM matters for search engine optimisation too, because modern search engines no longer crawl just the raw HTML source but render pages. Google’s web crawler, for instance, uses a current Chromium engine for this, much like a real browser. Content only inserted into the DOM via JavaScript after the initial load is generally captured, but with a time delay and higher computational cost for the search engine. Furthermore, subsequent DOM changes that shift layout directly affect the Cumulative Layout Shift (CLS) – one of the three central Core Web Vitals values and thus a genuine ranking factor. If you rely heavily on client-side rendered content, consider server-side rendering or static generation and have the effects checked as part of our SEO services.

Conclusion

The DOM is the invisible bridge through which every interactive website works, from the simple click handler to the complex single-page application. How efficiently it’s handled directly determines perceived speed, Core Web Vitals and thus rankings too. Whether virtual DOM, signals or targeted vanilla JavaScript manipulation is the right choice depends on the project – we’re happy to advise you as part of our custom software development or in an informal chat, with no strings attached.

Häufige Fragen

Is the DOM the same as the HTML source code?
No. The HTML source is the original text the server delivers. The DOM is the living tree structure the browser builds from it in memory, including all changes JavaScript makes after loading. In “view page source” you see the original HTML; in the browser DevTools, the current DOM state, which can deviate from it considerably.
What's the difference between the DOM and the virtual DOM?
The DOM is the actual tree structure of the page managed by the browser. The virtual DOM is a lightweight JavaScript representation of it that libraries like React keep in memory in order to compute changes there first and only then transfer them to the real DOM in batches – saving expensive, direct DOM access.
Why are many DOM manipulations bad for performance?
Every change affecting an element’s layout or size can trigger a reflow: the browser must recalculate the positions of affected (often also neighbouring) elements. If many such changes are made individually instead of batched, unnecessarily many reflows occur in a row, slowing the page noticeably.
What is the shadow DOM?
The shadow DOM is a separate, encapsulated DOM subtree attached to an element, isolating its content and styles from the rest of the page. It is a core part of the web components specification. This lets HTML elements like <video> or your own custom elements carry internal structure without external CSS accidentally changing it, or vice versa.
Can I manipulate the DOM without a JavaScript framework?
Yes, with pure (“vanilla”) JavaScript via native DOM APIs such as document.querySelector, element.textContent or element.classList. For smaller, targeted interactions that’s often even the leaner solution – frameworks pay off above all when many interconnected UI states have to be kept in sync.
Why should client-side rendered content be treated with caution for SEO?
Because content only inserted into the DOM via JavaScript after the initial load is harder or slower for search engines and other crawlers to capture. Google renders JavaScript reliably these days, but with a time delay and higher computational cost – server-side pre-rendered or statically generated content is captured more reliably and faster.
← Back to glossary
HOMEGLOSSARYDOCUMENT-OBJECT-MODEL