@vanilla-dom/core
Version:
轻量级 DOM 渲染引擎,VNode 到 DOM 转换
60 lines (59 loc) • 2.06 kB
JavaScript
//#region src/dom-utils.ts
/**
* DOM 操作工具集
* 提供高效的 DOM 创建、更新、插入等操作
*/
function createElement(tag) {
return document.createElement(tag);
}
function createTextNode(text) {
return document.createTextNode(text);
}
function createFragment() {
return document.createDocumentFragment();
}
function insertBefore(parent, newNode, referenceNode) {
parent.insertBefore(newNode, referenceNode);
}
function appendChild(parent, node) {
parent.appendChild(node);
}
function removeNode(node) {
const parent = node.parentNode;
if (parent) parent.removeChild(node);
}
function replaceNode(oldNode, newNode) {
const parent = oldNode.parentNode;
if (parent) parent.replaceChild(newNode, oldNode);
}
function clearChildren(element) {
while (element.firstChild) element.removeChild(element.firstChild);
}
function setProperty(element, key, value) {
if (key === "children") return;
if (key in element) element[key] = value;
else element.setAttribute(key, String(value));
}
function removeProperty(element, key) {
if (key === "children") return;
if (key in element) element[key] = null;
else element.removeAttribute(key);
}
function updateProperty(element, key, newValue, oldValue) {
if (newValue === oldValue) return;
if (newValue == null) removeProperty(element, key);
else setProperty(element, key, newValue);
}
function setEvents(element, events) {
for (const [eventType, handler] of Object.entries(events)) element.addEventListener(eventType, handler);
}
function removeEvents(element, events) {
for (const [eventType, handler] of Object.entries(events)) element.removeEventListener(eventType, handler);
}
function updateEvents(element, newEvents, oldEvents) {
if (oldEvents) removeEvents(element, oldEvents);
if (newEvents) setEvents(element, newEvents);
}
//#endregion
export { appendChild, clearChildren, createElement, createFragment, createTextNode, insertBefore, removeEvents, removeNode, removeProperty, replaceNode, setEvents, setProperty, updateEvents, updateProperty };
//# sourceMappingURL=dom-utils.js.map