/** * @file Node 一个带路径的Dom树 */ import { Emitter } from '@co-hooks/emitter'; export declare type OptionalDomNode = DomNode | null; export interface IDomNodeEvent { valueChange: [T, T]; childChange: []; attached: []; detached: [DomNode]; } /** * 一个带路径的Dom树 * */ export declare class DomNode extends Emitter> { /** * 节点ID */ readonly id: string; /** * 第一个子节点 */ firstChild: OptionalDomNode; /** * 最后一个子节点 */ lastChild: OptionalDomNode; /** * 左兄弟节点 */ leftNode: OptionalDomNode; /** * 右兄弟节点 */ rightNode: OptionalDomNode; /** * 父亲节点 */ parentNode: OptionalDomNode; private value; /** * 构造函数 * * @param value 初始值 * @param parentNode 父亲节点 */ constructor(value: T, parentNode?: OptionalDomNode); /** * 获取当前组件存储的值 * * @return 获取存储的值 */ getValue(): T; /** * 设置当前组件存储的值 */ setValue(value: T): void; /** * 获取当前节点的节点路径 * * @param filter 过滤函数,返回false的节点会被忽略 */ getPathNodes(filter: (node: DomNode) => boolean): Array>; /** * 获取当前节点的节点标识 * * @param processor 迭代函数,返回null会被忽略 */ getPathKeys(processor: (node: DomNode) => string | null): string[]; /** * 删除当前节点 * * @public */ remove(): void; /** * 追加节点 * * @public * @param node node节点 */ appendChild(node: DomNode): void; /** * 删除孩子节点 * * @public * @param node node节点 */ removeChild(node: DomNode): void; /** * 替换节点 * * @public * @param node 要替换成的node节点 * @param refNode 被替换的节点 * @return 被替换后的节点 */ replaceChild(node: DomNode, refNode: DomNode): OptionalDomNode; /** * 在节点前插入节点 * * @public * @param node 要插入的节点 * @param refNode 插入的相对位置的节点 */ insertBefore(node: DomNode, refNode?: OptionalDomNode): void; /** * 在节点之后插入节点 * * @public * @param node 要插入的node节点 * @param refNode 插入的相对位置的节点 */ insertAfter(node: DomNode, refNode?: DomNode): void; /** * 在指定位置插入节点 * * @param node 要插入的节点 * @param index 要插入的下标位置,不传默认插入到最后 */ insert(node: DomNode, index?: number): number; /** * 获取某节点在当前父节点的位置 * * @public * @param node 子节点 * @return 位置索引 */ getIndex(node: DomNode): number; /** * 当前节点是否为空 * * @public * @return 是否为空 */ isEmpty(): boolean; /** * 获取子孩子数组 * * @public * @return 返回节点数组 */ getChildNodes(): Array>; /** * 获取满足条件的子节点 * * @param matcher 匹配器,返回null忽略,返回false表示不匹配,返回true表示匹配 */ getSubNodes(matcher: (node: DomNode) => boolean | null): Array>; /** * 获取满足条件的第一个子节点 * * @param matcher 匹配器,返回null忽略,返回false表示不匹配,返回true表示匹配 */ getSubNode(matcher: (node: DomNode) => boolean | null): OptionalDomNode; private removeNode; }