14 lines
668 B
JavaScript
14 lines
668 B
JavaScript
// Tiny DOM builder: el('a', { class, href, onclick }, ...children). Attributes
|
|||
|
|
// that are null/undefined/false are skipped; on* keys become event listeners.
|
||
|
|
export function el(tag, attrs = {}, ...children) {
|
||
|
|
const node = document.createElement(tag);
|
||
|
|
for (const [key, value] of Object.entries(attrs)) {
|
||
|
|
if (value === undefined || value === null || value === false) continue;
|
||
|
|
if (key === 'class') node.className = value;
|
||
|
|
else if (key.startsWith('on')) node.addEventListener(key.slice(2), value);
|
||
|
|
else node.setAttribute(key, value === true ? '' : value);
|
||
|
|
}
|
||
|
|
node.append(...children.filter((c) => c !== null && c !== undefined));
|
||
|
|
return node;
|
||
|
|
}
|