import { ElementHandler } from "./ElementHandler";
import { type DOMUtilsCSSProperty, type DOMUtilsCSSPropertyType } from "./types/DOMUtilsCSSProperty";
import type { DOMUtilsCreateElementAttributesMap } from "./types/DOMUtilsEvent";
import type { DOMUtilsTargetElementType } from "./types/global";
import type { WindowApiOption } from "./types/WindowApi";
declare class DOMUtils extends ElementHandler {
constructor(option?: WindowApiOption);
/** 版本号 */
version: string;
/**
* 取消挂载在window下的DOMUtils并返回DOMUtils
* @example
* let DOMUtils = window.DOMUtils.noConflict()
*/
noConflict(): this;
/**
* 获取元素的属性值
* @param $el 目标元素
* @param attrName 属性名
* @example
* // 获取a.xx元素的href属性
* DOMUtils.attr(document.querySelector("a.xx"),"href");
* DOMUtils.attr("a.xx","href");
* > https://xxxx....
*/
attr($el: DOMUtilsTargetElementType | Element, attrName: string): string;
/**
* 设置元素的属性值
* @param $el 目标元素
* @param attrName 属性名
* @param attrValue 属性值
* @example
* // 修改a.xx元素的href属性为abcd
* DOMUtils.attr(document.querySelector("a.xx"),"href","abcd");
* DOMUtils.attr("a.xx","href","abcd");
*/
attr($el: DOMUtilsTargetElementType | Element, attrName: string, attrValue: string | boolean | number): void;
/**
* 创建元素
* @param tagName 标签名
* @param property 属性
* @param attributes 元素上的自定义属性
* @example
* // 创建一个DIV元素,且属性class为xxx
* DOMUtils.createElement("div",undefined,{ class:"xxx" });
* >
* @example
* // 创建一个DIV元素
* DOMUtils.createElement("div");
* >
* @example
* // 创建一个DIV元素
* DOMUtils.createElement("div","测试");
* > 测试
*/
createElement(
/** 元素名 */
tagName: K,
/** 属性 */
property?: ({
[P in keyof HTMLElementTagNameMap[K]]?: HTMLElementTagNameMap[K][P];
} & {
[key: string]: any;
}) | string,
/** 自定义属性 */
attributes?: DOMUtilsCreateElementAttributesMap): HTMLElementTagNameMap[K];
/**
* 创建元素
* @param tagName 自定义的标签名
* @param property 属性
* @param attributes 元素上的自定义属性
* @example
* // 创建一个custom-div元素,且属性class为xxx
* DOMUtils.createElement("custom-div",undefined,{ class:"xxx" });
* >
* @example
* // 创建一个custom-div元素
* DOMUtils.createElement("custom-div");
* >
* @example
* // 创建一个custom-div元素
* DOMUtils.createElement("custom-div","测试");
* > 测试
*/
createElement(
/** 元素名 */
tagName: string,
/** 属性 */
property?: ({
[P in keyof HTMLElement]?: HTMLElement[P];
} & {
[key: string]: any;
}) | string,
/** 自定义属性 */
attributes?: DOMUtilsCreateElementAttributesMap): HTMLElement;
/**
* 获取元素的样式属性值
* @param $el 目标元素
* @param property 样式属性名或包含多个属性名和属性值的对象
* @example
* // 获取元素a.xx的CSS属性display
* DOMUtils.css(document.querySelector("a.xx"),"display");
* DOMUtils.css("a.xx","display");
* > "none"
* */
css($el: DOMUtilsTargetElementType, property: DOMUtilsCSSPropertyType): string;
/**
* 获取元素的样式属性值
* @param $el 目标元素
* @param property 样式属性名或包含多个属性名和属性值的对象
* @example
* // 获取元素a.xx的CSS属性display
* DOMUtils.css(document.querySelector("a.xx"),"display");
* DOMUtils.css("a.xx","display");
* > "none"
* */
css($el: DOMUtilsTargetElementType, property: string): string;
/**
* 设置元素的样式属性
* @param $el 目标元素
* @param property 样式属性名或包含多个属性名和属性值的对象
* @param value 样式属性值
* @example
* // 设置元素a.xx的CSS属性display为block
* DOMUtils.css(document.querySelector("a.xx"),"display","block");
* DOMUtils.css(document.querySelector("a.xx"),"display","block !important");
* DOMUtils.css("a.xx","display","block");
* DOMUtils.css("a.xx","display","block !important");
* @example
* // 设置元素a.xx的CSS属性top为10px
* DOMUtils.css(document.querySelector("a.xx"),"top","10px");
* DOMUtils.css(document.querySelector("a.xx"),"top",10);
* */
css($el: DOMUtilsTargetElementType, property: DOMUtilsCSSPropertyType & string, value: string | number): string;
/**
* 设置元素的样式属性
* @param $el 目标元素
* @param property 样式属性名或包含多个属性名和属性值的对象
* @param value 样式属性值
* @example
* // 设置元素a.xx的CSS属性display为block
* DOMUtils.css(document.querySelector("a.xx"),{ display: "block" }});
* DOMUtils.css(document.querySelector("a.xx"),{ display: "block !important" }});
* @example
* // 设置元素a.xx的CSS属性top为10px
* DOMUtils.css(document.querySelector("a.xx"),{ top: "10px" });
* DOMUtils.css(document.querySelector("a.xx"),{ top: 10 });
* */
css($el: DOMUtilsTargetElementType, property: DOMUtilsCSSProperty | {
[key: string]: string | number;
} | string): string;
/**
* 获取元素的文本内容,优先返回textContent
* @param $el 目标元素
* @returns 如果传入了text,则返回undefined;否则返回文本内容
* @example
* // 设置元素a.xx的文本内容为abcd
* DOMUtils.text(document.querySelector("a.xx"),"abcd")
* DOMUtils.text("a.xx","abcd")
* DOMUtils.text("a.xx",document.querySelector("b"))
* */
text($el: DOMUtilsTargetElementType | Element | DocumentFragment | Node): string;
/**
* 设置元素的文本内容
* @param $el 目标元素
* @param text (可选)文本内容
* @returns 如果传入了text,则返回undefined;否则返回文本内容
* @example
* // 设置元素a.xx的文本内容为abcd
* DOMUtils.text(document.querySelector("a.xx"),"abcd")
* DOMUtils.text("a.xx","abcd")
* DOMUtils.text("a.xx",document.querySelector("b"))
* */
text($el: DOMUtilsTargetElementType | Element | DocumentFragment | Node, text: string | HTMLElement | Element | number): void;
/**
* 设置元素的HTML内容
* @param element 目标元素
* @param html (可选)HTML内容|元素
* @returns 如果传入了html,则返回undefined;否则返回HTML内容
* @example
* // 设置元素a.xx的文本内容为abcd
* DOMUtils.html(document.querySelector("a.xx"),"abcd")
* DOMUtils.html("a.xx","abcd")
* DOMUtils.html("a.xx",document.querySelector("b"))
* */
html(element: DOMUtilsTargetElementType, html: string | HTMLElement | Element | number): void;
/**
* 获取元素的HTML内容
* @param $el 目标元素
* @param html (可选)HTML内容|元素
* @returns 如果传入了html,则返回undefined;否则返回HTML内容
* @example
* // 设置元素a.xx的文本内容为abcd
* DOMUtils.html(document.querySelector("a.xx"),"abcd")
* DOMUtils.html("a.xx","abcd")
* DOMUtils.html("a.xx",document.querySelector("b"))
* */
html($el: DOMUtilsTargetElementType): string;
/**
* 获取移动元素的transform偏移
*/
getTransform($el: HTMLElement, isShow?: boolean): {
transformLeft: number;
transformTop: number;
};
/**
* 设置元素的value属性值
* @param $el 目标元素
* @param value (可选)value属性值
* @returns 如果传入了value,则返回undefined;否则返回value属性值
* > true
* @example
* // 修改元素input.xx的复选框值为true
* DOMUtils.val(document.querySelector("input.xx"),true)
* DOMUtils.val("input.xx",true)
* */
val($el: HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement | string | (HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement)[] | NodeListOf, value: string | boolean | number): void;
/**
* 获取value属性值
* @param $el 目标元素
* @example
* // 获取元素textarea的值
* DOMUtils.val(document.querySelector("textarea.xx"))
* */
val($el: HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement | string | (HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement)[] | NodeListOf): string;
/**
* 获取value属性值
* @param $el 目标元素
* @example
* // 获取元素input.xx的复选框值
* DOMUtils.val(document.querySelector("input.xx"))
* DOMUtils.val("input.xx")
* */
val($el: HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement | (HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement)[] | NodeListOf): boolean | string;
/**
* 获取元素的属性值
* @param $el 目标元素
* @param propName 属性名
* @param propValue 属性值
* @example
* // 获取元素a.xx的属性data-value
* DOMUtils.val(document.querySelector("a.xx"),"data-value")
* DOMUtils.val("a.xx","data-value")
* > undefined
* */
prop($el: DOMUtilsTargetElementType | DocumentFragment, propName: string): T;
/**
* 设置元素的属性值
* @param $el 目标元素
* @param propName 属性名
* @param propValue 属性值
* @example
* // 设置元素a.xx的属性data-value为1
* DOMUtils.val(document.querySelector("a.xx"),"data-value",1)
* DOMUtils.val("a.xx","data-value",1)
* */
prop($el: DOMUtilsTargetElementType | DocumentFragment, propName: string, propValue: T): void;
/**
* 移除元素的属性
* @param $el 目标元素
* @param attrName 属性名
* @example
* // 移除元素a.xx的属性data-value
* DOMUtils.removeAttr(document.querySelector("a.xx"),"data-value")
* DOMUtils.removeAttr("a.xx","data-value")
* */
removeAttr($el: DOMUtilsTargetElementType | Element, attrName: string): void;
/**
* 移除元素class名
* @param $el 目标元素
* @param className 类名
* @example
* // 移除元素a.xx的className为xx
* DOMUtils.removeClass(document.querySelector("a.xx"),"xx")
* DOMUtils.removeClass("a.xx","xx")
*/
removeClass($el: DOMUtilsTargetElementType | Element, className?: string | string[] | undefined | null): void;
/**
* 移除元素的属性
* @param $el 目标元素
* @param propName 属性名
* @example
* // 移除元素a.xx的href属性
* DOMUtils.removeProp(document.querySelector("a.xx"),"href")
* DOMUtils.removeProp("a.xx","href")
* */
removeProp($el: DOMUtilsTargetElementType | DocumentFragment, propName: string): void;
/**
* 给元素添加class
* @param $el 目标元素
* @param className class名
* @example
* // 元素a.xx的className添加_vue_
* DOMUtils.addClass(document.querySelector("a.xx"),"_vue_")
* DOMUtils.addClass("a.xx","_vue_")
* */
addClass($el: DOMUtilsTargetElementType | Element, className: string | string[]): void;
/**
* 判断元素是否存在className
* @param $el
* @param className
*/
hasClass($el: DOMUtilsTargetElementType | Element, className: string | string[]): boolean;
/**
* 函数在元素内部末尾添加子元素或HTML字符串
* @param $el 目标元素
* @param args 子元素或HTML字符串
* @example
* // 元素a.xx的内部末尾添加一个元素
* DOMUtils.append(document.querySelector("a.xx"), document.querySelector("b.xx"))
* DOMUtils.append("a.xx", "")
* DOMUtils.append(document, [document.querySelector("b.xx"), document.querySelector("c.xx"), document.querySelector("d.xx")])
* DOMUtils.append(document, document.querySelector("b.xx"), document.querySelector("c.xx"), document.querySelector("d.xx"))
* */
append($el: DOMUtilsTargetElementType | DocumentFragment, ...args: (HTMLElement | string | Element | DocumentFragment | (HTMLElement | string | Element | DocumentFragment)[] | NodeList)[]): void;
/**
* 函数 在元素内部开头添加子元素或HTML字符串
* @param $el 目标元素
* @param args 子元素或HTML字符串
* @example
* // 元素a.xx内部开头添加一个元素
* DOMUtils.prepend(document.querySelector("a.xx"),document.querySelector("b.xx"))
* DOMUtils.prepend("a.xx","'")
* DOMUtils.prepend(document, [document.querySelector("b.xx"), document.querySelector("c.xx"), document.querySelector("d.xx")])
* DOMUtils.prepend(document, document.querySelector("b.xx"), document.querySelector("c.xx"), document.querySelector("d.xx"))
* */
prepend($el: DOMUtilsTargetElementType | DocumentFragment, ...args: (HTMLElement | string | Element | DocumentFragment | (HTMLElement | string | Element | DocumentFragment)[] | NodeList)[]): void;
/**
* 在元素后面添加兄弟元素或HTML字符串
* @param $el 目标元素
* @param args 兄弟元素或HTML字符串
* @example
* // 元素a.xx后面添加一个元素
* DOMUtils.after(document.querySelector("a.xx"),document.querySelector("b.xx"))
* DOMUtils.after("a.xx","'")
* DOMUtils.after(document, [document.querySelector("b.xx"), document.querySelector("c.xx"), document.querySelector("d.xx")])
* DOMUtils.after(document, document.querySelector("b.xx"), document.querySelector("c.xx"), document.querySelector("d.xx"))
* */
after($el: DOMUtilsTargetElementType, ...args: (HTMLElement | string | Element | DocumentFragment | (HTMLElement | string | Element | DocumentFragment)[] | NodeList)[]): void;
/**
* 在元素前面添加兄弟元素或HTML字符串
* @param $el 目标元素
* @param args 兄弟元素或HTML字符串
* @example
* // 元素a.xx前面添加一个元素
* DOMUtils.before(document.querySelector("a.xx"),document.querySelector("b.xx"))
* DOMUtils.before("a.xx","'")
* DOMUtils.before(document, [document.querySelector("b.xx"), document.querySelector("c.xx"), document.querySelector("d.xx")])
* DOMUtils.before(document, document.querySelector("b.xx"), document.querySelector("c.xx"), document.querySelector("d.xx"))
*
* */
before($el: DOMUtilsTargetElementType, ...args: (HTMLElement | string | Element | DocumentFragment | (HTMLElement | string | Element | DocumentFragment)[] | NodeList)[]): void;
/**
* 移除元素(包括它和内部使用.on添加的监听事件)
* @param $el 目标元素,可以是数组、单个元素、NodeList、元素选择器
* @example
* DOMUtils.remove(document.querySelector("a.xx"))
* DOMUtils.remove(document.querySelectorAll("a.xx"))
* DOMUtils.remove("a.xx")
* DOMUtils.remove([a.xxx, div.xxx, span.xxx])
* */
remove($el: DOMUtilsTargetElementType | Element | null | undefined): void;
/**
* 移除元素内所有的子元素
* @param $el 目标元素
* @example
* // 移除元素a.xx元素的所有子元素
* DOMUtils.empty(document.querySelector("a.xx"))
* DOMUtils.empty("a.xx")
* */
empty($el: DOMUtilsTargetElementType | Element): void;
/**
* 获取元素相对于文档的偏移坐标(加上文档的滚动条)
* @param $el 目标元素
* @example
* // 获取元素a.xx的对于文档的偏移坐标
* DOMUtils.offset(document.querySelector("a.xx"))
* DOMUtils.offset("a.xx")
* > 0
*/
offset($el: HTMLElement | string): {
/** y轴偏移 */
top: number;
/** x轴偏移 */
left: number;
} | undefined;
/**
* 获取元素的宽度
* @param $el 要获取宽度的元素
* @param value 宽度值
* @param isShow 是否已进行isShow,避免爆堆栈
* @returns 元素的宽度,单位为像素
* @example
* // 获取元素a.xx的宽度
* DOMUtils.width(document.querySelector("a.xx"))
* DOMUtils.width("a.xx")
* > 100
* // 获取window的宽度
* DOMUtils.width(window)
* > 400
* @example
* // 设置元素a.xx的宽度为200
* DOMUtils.width(document.querySelector("a.xx"),200)
* DOMUtils.width("a.xx",200)
*/
width($el: HTMLElement | string | Window | typeof globalThis | Document, isShow?: boolean): number;
/**
* 获取元素的高度
* @param $el 要获取高度的元素
* @param isShow 是否已进行isShow,避免爆堆栈
* @returns 元素的高度,单位为像素
* @example
* // 获取元素a.xx的高度
* DOMUtils.height(document.querySelector("a.xx"))
* DOMUtils.height("a.xx")
* > 100
* // 获取window的高度
* DOMUtils.height(window)
* > 700
* @example
* // 设置元素a.xx的高度为200
* DOMUtils.height(document.querySelector("a.xx"),200)
* DOMUtils.height("a.xx",200)
*/
height($el: HTMLElement | string | Window | typeof globalThis | Document, isShow?: boolean): number;
/**
* 获取元素的外部宽度(包括边框和外边距)
* @param $el 要获取外部宽度的元素
* @param [isShow=false] 是否已进行isShow,避免爆堆栈
* @returns 元素的外部宽度,单位为像素
* @example
* // 获取元素a.xx的外部宽度
* DOMUtils.outerWidth(document.querySelector("a.xx"))
* DOMUtils.outerWidth("a.xx")
* > 100
* // 获取window的外部宽度
* DOMUtils.outerWidth(window)
* > 400
*/
outerWidth($el: HTMLElement | string | Window | typeof globalThis | Document, isShow?: boolean): number;
/**
* 获取元素的外部高度(包括边框和外边距)
* @param {HTMLElement|string} $el 要获取外部高度的元素
* @param {boolean} [isShow=false] 是否已进行isShow,避免爆堆栈
* @returns {number} 元素的外部高度,单位为像素
* @example
* // 获取元素a.xx的外部高度
* DOMUtils.outerHeight(document.querySelector("a.xx"))
* DOMUtils.outerHeight("a.xx")
* > 100
* // 获取window的外部高度
* DOMUtils.outerHeight(window)
* > 700
*/
outerHeight($el: HTMLElement | string | Window | typeof globalThis | Document, isShow?: boolean): number;
/**
* 将一个元素替换为另一个元素
* @param $el 目标元素
* @param $newEl 新元素
* @example
* // 替换元素a.xx为b.xx
* DOMUtils.replaceWith(document.querySelector("a.xx"),document.querySelector("b.xx"))
* DOMUtils.replaceWith("a.xx",'')
*/
replaceWith($el: DOMUtilsTargetElementType, $newEl: HTMLElement | string | Node): void;
/**
* 将一个元素包裹在指定的HTML元素中
* @param $el 要包裹的元素
* @param wrapperHTML 要包裹的HTML元素的字符串表示形式
* @example
* // 将a.xx元素外面包裹一层div
* DOMUtils.wrap(document.querySelector("a.xx"),"")
*/
wrap($el: DOMUtilsTargetElementType, wrapperHTML: string): void;
/**
* 获取当前元素的前一个兄弟元素
* @param $el 当前元素
* @returns 前一个兄弟元素
* @example
* // 获取a.xx元素前一个兄弟元素
* DOMUtils.prev(document.querySelector("a.xx"))
* DOMUtils.prev("a.xx")
* > ....
*/
prev($el: HTMLElement | string): HTMLElement;
/**
* 获取当前元素的后一个兄弟元素
* @param $el 当前元素
* @returns 后一个兄弟元素
* @example
* // 获取a.xx元素前一个兄弟元素
* DOMUtils.next(document.querySelector("a.xx"))
* DOMUtils.next("a.xx")
* > ....
*/
next($el: HTMLElement | string): HTMLElement;
/**
* 获取当前元素的所有兄弟元素
* @param element 当前元素
* @returns 所有兄弟元素
* @example
* // 获取a.xx元素所有兄弟元素
* DOMUtils.siblings(document.querySelector("a.xx"))
* DOMUtils.siblings("a.xx")
* > (3)[div.logo-wrapper, div.forum-block, div.more-btn-desc]
*/
siblings(element: HTMLElement | string): HTMLElement[];
/**
* 获取当前元素的父元素
* @param $el 当前元素
* @returns 父元素
* @example
* // 获取a.xx元素的父元素
* DOMUtils.parent(document.querySelector("a.xx"))
* DOMUtils.parent("a.xx")
* > ....
*/
parent($el: HTMLElement | string): HTMLElement;
/**
* 获取当前元素的父元素
* @param $el 当前元素
* @returns 父元素
* @example
* // 获取a.xx元素的父元素
* DOMUtils.parent(document.querySelector("a.xx"))
* DOMUtils.parent("a.xx")
* > ....
*/
parent($el: HTMLElement[] | NodeList): HTMLElement[];
/**
* 将字符串转为Element元素
* @param html
* @param useParser 是否使用DOMParser来生成元素,有些时候通过DOMParser生成的元素有点问题
* + true 使用DOMPraser来转换字符串
* + false (默认)创建一个div,里面放入字符串,然后提取firstChild
* @param isComplete 是否是完整的
* + true 如果useParser为true,那么返回整个使用DOMParser转换成的Document
* 如果useParser为false,返回一个DIV元素,DIV元素内包裹着需要转换的字符串
* + false (默认)如果useParser为true,那么返回整个使用DOMParser转换成的Document的body
* 如果useParser为false,返回一个DIV元素的firstChild
* @example
* // 将字符串转为Element元素
* DOMUtils.toElement("")
* >
* @example
* // 使用DOMParser将字符串转为Element元素
* DOMUtils.toElement("",true)
* >
* @example
* // 由于需要转换的元素是多个元素,将字符串转为完整的Element元素
* DOMUtils.toElement("",false, true)
* >
* @example
* // 由于需要转换的元素是多个元素,使用DOMParser将字符串转为完整的Element元素
* DOMUtils.toElement("",true, true)
* > #document
*/
toElement(html: string, useParser?: T1, isComplete?: T2): T1 extends true ? (T2 extends true ? Document : HTMLElement) : HTMLElement;
/**
* 将字符串转为Element元素数组
* @param html
* @param useParser 是否使用DOMParser来生成元素,有些时候通过DOMParser生成的元素有点问题
* + true 使用DOMPraser来转换字符串
* + false (默认)创建一个div,里面放入字符串,然后提取childNodes
* @example
* // 将字符串转为Element元素数组
* DOMUtils.toElements("")
* > []
* @example
* // 使用DOMParser将字符串转为Element元素数组
* DOMUtils.toElements("",true)
* > []
*/
toElements(html: string, useParser?: boolean): ChildNode[];
/**
* 序列化表单元素
* @param $form 表单元素
* @example
* DOMUtils.serialize(document.querySelector("form"))
* > xxx=xxx&aaa=
*/
serialize($form: HTMLFormElement): string;
/**
* 创建一个新的DOMUtils实例
* @param option
* @returns
*/
createDOMUtils(option?: WindowApiOption): DOMUtils;
/**
* 获取文字的位置信息
* @param $input 输入框
* @param selectionStart 起始位置
* @param selectionEnd 结束位置
* @example
* DOMUtils.getTextBoundingRect(document.querySelector("input"));
*/
getTextBoundingRect($input: HTMLInputElement, selectionStart?: number | string, selectionEnd?: number | string): DOMRect;
/**
* 在页面中增加style元素,如果html节点存在子节点,添加子节点第一个,反之,添加到html节点的子节点最后一个
* @param cssText css字符串
* @returns 返回添加的CSS标签
* @example
* DOMUtils.addStyle("html{}");
* >
*/
addStyle(cssText: string): HTMLStyleElement;
/**
* 检测点击的地方是否在该元素区域内
* @param $el 需要检测的元素
* @returns
* + true 点击在元素上
* + false 未点击在元素上
* @example
* DOMUtils.checkUserClickInNode(document.querySelector(".xxx"));
* > false
**/
checkUserClickInNode($el: Element | Node | HTMLElement): boolean;
/**
* 删除某个父元素,父元素可能在上层或上上层或上上上层...
* @param $el 当前元素
* @param parentSelector 判断是否满足父元素,参数为当前处理的父元素,满足返回true,否则false
* @returns
* + true 已删除
* + false 未删除
* @example
* DOMUtils.deleteParentNode(document.querySelector("a"),".xxx");
* > true
**/
deleteParentNode($el: Node | HTMLElement | Element | null, parentSelector: string): boolean;
/**
* 定位元素上的字符串,返回一个迭代器
* @param $el 目标元素
* @param text 需要定位的字符串
* @param filter (可选)过滤器函数,返回值为true是排除该元素
* @example
* let textIterator = DOMUtils.findElementsWithText(document.documentElement,"xxxx");
* textIterator.next();
* > {value: ?HTMLElement, done: boolean, next: Function}
*/
findElementsWithText($el: T, text: string, filter?: (element: T) => boolean): Generator;
/**
* 寻找可见元素,如果元素不可见,则向上找它的父元素直至找到,如果父元素不存在则返回null
* @param $el
* @example
* let visibleElement = DOMUtils.findVisibleElement(document.querySelector("a.xx"));
* >
*/
findVisibleElement($el: HTMLElement | Element | Node): HTMLElement | null;
/**
* 将元素上的文本或元素使用光标进行选中
*
* 注意,如果设置startIndex和endIndex,且元素上并无可选则的坐标,那么会报错
* @param $el 目标元素
* @param childTextNode 目标元素下的#text元素
* @param startIndex (可选)开始坐标,可为空
* @param endIndex (可选)结束坐标,可为空
* @example
* DOMUtils.setElementSelection(document.querySelector("span"));
*/
setElementSelection($el: HTMLElement | Element | Node, childTextNode?: ChildNode, startIndex?: number, endIndex?: number): void;
}
declare const domUtils: DOMUtils;
export { domUtils as DOMUtils };