Examples & Recipes
Real-world examples and recipes for using dawm in common scenarios.
Basic HTML Parsing
Parse an HTML string and interact with the DOM:
import { parseHTML } from "dawm";
const doc = parseHTML(`
<!doctype html>
<html>
<head><title>My Page</title></head>
<body>
<h1>Hello, world!</h1>
<p class="intro">Welcome to dawm.</p>
</body>
</html>
`);
console.log(doc.title); // "My Page"
console.log(doc.body.firstElementChild); // <h1> element
Querying Elements
Use familiar CSS selectors to find elements:
import { parseHTML } from "dawm";
const doc = parseHTML(`
<ul id="list">
<li class="item">First</li>
<li class="item active">Second</li>
<li class="item">Third</li>
</ul>
`);
// querySelector
const active = doc.querySelector(".active");
console.log(active?.textContent); // "Second"
// querySelectorAll
const items = doc.querySelectorAll(".item");
console.log(items.length); // 3
// getElementById
const list = doc.getElementById("list");
console.log(list?.tagName); // "UL"
// getElementsByClassName
const allItems = doc.getElementsByClassName("item");
console.log(allItems.length); // 3
Manipulating the DOM
Add, remove, and modify elements:
import { parseHTML } from "dawm";
const doc = parseHTML("<div id='app'></div>");
const app = doc.getElementById("app")!;
// Create and append elements
const p = doc.createElement("p");
p.textContent = "Created with dawm!";
app.appendChild(p);
console.log(app.innerHTML); // "<p>Created with dawm!</p>"
Working with Attributes
Read and modify element attributes:
import { parseHTML } from "dawm";
const doc = parseHTML('<a href="https://dawm.dev" class="link" data-id="42">dawm</a>');
const link = doc.querySelector("a")!;
console.log(link.getAttribute("href")); // "https://dawm.dev"
console.log(link.classList.contains("link")); // true
console.log(link.dataset.id); // "42"
link.setAttribute("target", "_blank");
link.classList.add("external");
XML Parsing
Parse and traverse XML documents:
import { parseDocument } from "dawm";
const xml = `<?xml version="1.0" encoding="UTF-8"?>
<catalog>
<book id="1">
<title>The Rust Programming Language</title>
<author>Steve Klabnik</author>
</book>
<book id="2">
<title>Programming TypeScript</title>
<author>Boris Cherny</author>
</book>
</catalog>`;
const doc = parseDocument(xml, "application/xml");
const books = doc.getElementsByTagName("book");
for (const book of books) {
const title = book.getElementsByTagName("title")[0]?.textContent;
console.log(title);
}
// "The Rust Programming Language"
// "Programming TypeScript"
HTML Serialization
Serialize a DOM tree back to an HTML string:
import { parseHTML } from "dawm";
import { XMLSerializer } from "dawm/serialize";
const doc = parseHTML("<div><p>Hello</p></div>");
const serializer = new XMLSerializer();
console.log(doc.body.innerHTML);
// "<div><p>Hello</p></div>"
console.log(serializer.serializeToString(doc));
// Full document serialization
Web Scraping Pattern
Extract structured data from HTML:
import { parseHTML } from "dawm";
async function scrapeProducts(html: string) {
const doc = parseHTML(html);
const cards = doc.querySelectorAll(".product-card");
return Array.from(cards).map((card) => ({
name: card.querySelector(".product-name")?.textContent?.trim(),
price: card.querySelector(".product-price")?.textContent?.trim(),
url: card.querySelector("a")?.getAttribute("href"),
}));
}
SSR (Server-Side Rendering)
Use dawm as a lightweight DOM for server-side rendering:
import { parseHTML } from "dawm";
function renderPage(data: { title: string; content: string }) {
const doc = parseHTML(`
<!doctype html>
<html>
<head><title></title></head>
<body>
<main></main>
</body>
</html>
`);
doc.title = data.title;
const main = doc.querySelector("main")!;
main.innerHTML = data.content;
return doc.documentElement.outerHTML;
}
Using with DOMParser
dawm provides a standards-compliant DOMParser class:
import { DOMParser } from "dawm";
const parser = new DOMParser();
const doc = parser.parseFromString(
"<div>Hello from DOMParser</div>",
"text/html"
);
console.log(doc.body.firstElementChild?.textContent);
// "Hello from DOMParser"
Fragment Parsing
Parse HTML fragments without creating a full document:
import { parseFragment } from "dawm/parse";
const frag = parseFragment("<li>One</li><li>Two</li><li>Three</li>", "ul");
console.log(frag.childNodes.length); // 3
frag.childNodes.forEach((node) => {
console.log(node.textContent);
});
// "One", "Two", "Three"