A super fast Node.js addon for HTML parsing and manipulation, written in Rust.
- High-performance DOM parsing and manipulation
- Exposes a simple JavaScript API via NAPI-RS
- Designed for both server-side and CLI HTML processing
- Written in Rust for speed and safety
yarn add niddle
# or
npm install niddle
const { parse } = require('niddle');
const html = '<div id="main"><span>Hello</span></div>';
const root = parse(html);
const mainDiv = root.select('#main');
mainDiv.append('<p>World</p>');
console.log(mainDiv.outerHtml()); // <div id="main"><span>Hello</span><p>World</p></div>
Parses an HTML string and returns a NodeRepr
instance representing the root node.
html
(string): The HTML content to parse.
NodeRepr
: The parsed root node.
Represents a DOM node and provides various manipulation methods.
- append(content: string | NodeRepr): void
- Appends a new node or HTML string as a child.
- appendSequence(nodes: NodeRepr[]): void
- Appends multiple nodes.
- clone(): NodeRepr
- Clones the current node (not including descendants).
- cloneRecursive(): NodeRepr
- Clones the node and all descendants.
- getAttribute(name: string): string
- Gets an attribute value by name.
- getAttributes(): Record<string, string>
- Gets all attributes as a key-value object.
- getChildren(): NodeRepr[]
- Returns all child nodes.
- innerHtml(): string
- Gets the HTML content of all descendants.
- insertAfter(node: NodeRepr): void
- Inserts the current node after the specified node.
- insertBefore(node: NodeRepr): void
- Inserts the current node before the specified node.
- insertSequenceAfter(nodes: NodeRepr[]): void
- Inserts multiple nodes after the current node.
- insertSequenceBefore(nodes: NodeRepr[]): void
- Inserts multiple nodes before the current node.
- outerHtml(): string
- Gets the HTML content including the node itself.
- prepend(content: string | NodeRepr): void
- Prepends a new node or HTML string as a child.
- prependSequence(nodes: NodeRepr[]): void
- Prepends multiple nodes.
- remove(): void
- Removes the node from the DOM.
- removeAllAttributes(): void
- Removes all attributes from the node.
- removeAttribute(name: string): void
- Removes an attribute by name.
- select(selectors: string): NodeRepr
- Selects the first node matching the selector.
- selectAll(selectors: string): NodeRepr[]
- Selects all nodes matching the selector.
- setAttribute(name: string, value: string): void
- Sets an attribute value.
- setAttributes(attrs: Record<string, string>): void
- Sets multiple attributes.
- text(): string
- Gets the text content of the node.
const { parse } = require('niddle');
const root = parse('<div id="foo" class="bar">hello <span>world</span></div>');
const div = root.select('div');
console.log(div.getAttribute('id')); // "foo"
console.log(div.text()); // "hello world"
div.setAttribute('title', 'my-title');
console.log(div.outerHtml()); // <div id="foo" class="bar" title="my-title">hello <span>world</span></div>
yarn install
yarn build
yarn test
cargo benchmark
yarn benchmark
For more usage examples and advanced API, see the source code and benchmarks in the repository.