A JavaScript implementation of many web standards
—
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Pending
The risk profile of this skill
This guide covers the fundamental concepts and basic usage patterns for jsdom.
jsdom creates a browser-like environment in Node.js, providing:
The simplest way to create a DOM instance:
const { JSDOM } = require("jsdom");
const dom = new JSDOM(`<!DOCTYPE html><p>Hello world</p>`);
const paragraph = dom.window.document.querySelector("p");
console.log(paragraph.textContent); // "Hello world"The window object is your gateway to all browser APIs:
const { JSDOM } = require("jsdom");
const dom = new JSDOM(`<!DOCTYPE html><body></body>`);
// Access window directly
const window = dom.window;
// Or use destructuring
const { document, Element, Event, localStorage } = dom.window;const { JSDOM } = require("jsdom");
const dom = new JSDOM(`<!DOCTYPE html><body></body>`);
const { document } = dom.window;
// Create and append elements
const div = document.createElement("div");
div.id = "main";
div.className = "container";
div.textContent = "Hello World";
document.body.appendChild(div);const { JSDOM } = require("jsdom");
const dom = new JSDOM(`
<!DOCTYPE html>
<body>
<div id="main" class="container">
<p>Hello</p>
<p>World</p>
</div>
</body>
`);
const { document } = dom.window;
// Get element by ID
const main = document.getElementById("main");
// Query selectors
const paragraphs = document.querySelectorAll("p");
const firstP = document.querySelector("p");
// Get elements by class
const containers = document.getElementsByClassName("container");const { JSDOM } = require("jsdom");
const dom = new JSDOM(`<!DOCTYPE html><body><p>Original</p></body>`);
const { document } = dom.window;
const p = document.querySelector("p");
// Change text content
p.textContent = "Updated text";
// Change inner HTML
p.innerHTML = "<strong>Bold text</strong>";
// Modify attributes
p.setAttribute("class", "highlight");
p.id = "my-paragraph";The url option is important for relative URL resolution:
const dom = new JSDOM(`<!DOCTYPE html><body></body>`, {
url: "https://example.org/"
});
console.log(dom.window.location.href); // "https://example.org/"Control how the document is parsed:
// HTML parsing (default)
const dom1 = new JSDOM(`<!DOCTYPE html><p>Hello</p>`, {
contentType: "text/html"
});
// XML parsing
const dom2 = new JSDOM(`<root><item/></root>`, {
contentType: "application/xml"
});Set the document referrer:
const dom = new JSDOM(`<!DOCTYPE html><body></body>`, {
url: "https://example.org/",
referrer: "https://google.com/"
});
console.log(dom.window.document.referrer); // "https://google.com/"const dom = new JSDOM(`<!DOCTYPE html><p>Hello</p>`);const dom = await JSDOM.fromURL("https://example.com/");
console.log(dom.window.document.title);const dom = await JSDOM.fromFile("./page.html");For lightweight DOM manipulation without a full browser environment:
const frag = JSDOM.fragment(`<p>Hello</p><p>World</p>`);
console.log(frag.childNodes.length); // 2