@whitesev/domutils 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,877 @@
1
+ declare class DOMUtils {
2
+ /** 版本号 */
3
+ version: string;
4
+ /**
5
+ * 获取元素的属性值
6
+ * @param element 目标元素
7
+ * @param attrName 属性名
8
+ * @example
9
+ * // 获取a.xx元素的href属性
10
+ * DOMUtils.attr(document.querySelector("a.xx"),"href");
11
+ * DOMUtils.attr("a.xx","href");
12
+ * > https://xxxx....
13
+ */
14
+ attr(element: HTMLElement | string, attrName: string): string;
15
+ /**
16
+ * 设置元素的属性值
17
+ * @param element 目标元素
18
+ * @param attrName 属性名
19
+ * @param attrValue 属性值
20
+ * @example
21
+ * // 修改a.xx元素的href属性为abcd
22
+ * DOMUtils.attr(document.querySelector("a.xx"),"href","abcd");
23
+ * DOMUtils.attr("a.xx","href","abcd");
24
+ */
25
+ attr(element: HTMLElement | string, attrName: string, attrValue: string): void;
26
+ /**
27
+ * 创建元素
28
+ * @param tagName 标签名
29
+ * @param property 属性
30
+ * @param attributes 元素上的自定义属性
31
+ * @example
32
+ * // 创建一个DIV元素,且属性class为xxx
33
+ * DOMUtils.createElement("div",undefined,{ class:"xxx" });
34
+ * > <div class="xxx"></div>
35
+ * @example
36
+ * // 创建一个DIV元素
37
+ * DOMUtils.createElement("div");
38
+ * > <div></div>
39
+ * @example
40
+ * // 创建一个DIV元素
41
+ * DOMUtils.createElement("div","测试");
42
+ * > <div>测试</div>
43
+ */
44
+ createElement<K extends keyof HTMLElementTagNameMap>(
45
+ /** 元素名 */
46
+ tagName: K,
47
+ /** 属性 */
48
+ property?: ({
49
+ [P in keyof HTMLElementTagNameMap[K]]?: HTMLElementTagNameMap[K][P];
50
+ } & {
51
+ [key: string]: any;
52
+ }) | string,
53
+ /** 自定义属性 */
54
+ attributes?: DOMUtilsCreateElementAttributesMap): HTMLElementTagNameMap[K];
55
+ /**
56
+ * 获取元素的样式属性值
57
+ * @param element 目标元素
58
+ * @param property 样式属性名或包含多个属性名和属性值的对象
59
+ * @example
60
+ * // 获取元素a.xx的CSS属性display
61
+ * DOMUtils.css(document.querySelector("a.xx"),"display");
62
+ * DOMUtils.css("a.xx","display");
63
+ * > "none"
64
+ * */
65
+ css(element: HTMLElement | string, property: keyof CSSStyleDeclaration & string): string;
66
+ /**
67
+ * 设置元素的样式属性
68
+ * @param element 目标元素
69
+ * @param property 样式属性名或包含多个属性名和属性值的对象
70
+ * @param value 样式属性值
71
+ * @example
72
+ * // 设置元素a.xx的CSS属性display为block
73
+ * DOMUtils.css(document.querySelector("a.xx"),"display","block");
74
+ * DOMUtils.css(document.querySelector("a.xx"),"display","block !important");
75
+ * DOMUtils.css("a.xx","display","block");
76
+ * DOMUtils.css("a.xx","display","block !important");
77
+ * @example
78
+ * // 设置元素a.xx的CSS属性top为10px
79
+ * DOMUtils.css(document.querySelector("a.xx"),"top","10px");
80
+ * DOMUtils.css(document.querySelector("a.xx"),"top",10);
81
+ * */
82
+ css(element: HTMLElement | string, property: keyof CSSStyleDeclaration & string, value: string | number): string;
83
+ /**
84
+ * 设置元素的样式属性
85
+ * @param element 目标元素
86
+ * @param property 样式属性名或包含多个属性名和属性值的对象
87
+ * @param value 样式属性值
88
+ * @example
89
+ * // 设置元素a.xx的CSS属性display为block
90
+ * DOMUtils.css(document.querySelector("a.xx"),{ display: "block" }});
91
+ * DOMUtils.css(document.querySelector("a.xx"),{ display: "block !important" }});
92
+ * @example
93
+ * // 设置元素a.xx的CSS属性top为10px
94
+ * DOMUtils.css(document.querySelector("a.xx"),{ top: "10px" });
95
+ * DOMUtils.css(document.querySelector("a.xx"),{ top: 10 });
96
+ * */
97
+ css(element: HTMLElement | string, property: {
98
+ [P in keyof CSSStyleDeclaration]?: CSSStyleDeclaration[P];
99
+ }): string;
100
+ /**
101
+ * 获取元素的文本内容
102
+ * @param element 目标元素
103
+ * @param text (可选)文本内容
104
+ * @returns 如果传入了text,则返回undefined;否则返回文本内容
105
+ * @example
106
+ * // 设置元素a.xx的文本内容为abcd
107
+ * DOMUtils.text(document.querySelector("a.xx"),"abcd")
108
+ * DOMUtils.text("a.xx","abcd")
109
+ * DOMUtils.text("a.xx",document.querySelector("b"))
110
+ * */
111
+ text(element: HTMLElement | string): string;
112
+ /**
113
+ * 设置元素的文本内容
114
+ * @param element 目标元素
115
+ * @param text (可选)文本内容
116
+ * @returns 如果传入了text,则返回undefined;否则返回文本内容
117
+ * @example
118
+ * // 设置元素a.xx的文本内容为abcd
119
+ * DOMUtils.text(document.querySelector("a.xx"),"abcd")
120
+ * DOMUtils.text("a.xx","abcd")
121
+ * DOMUtils.text("a.xx",document.querySelector("b"))
122
+ * */
123
+ text(element: HTMLElement | string, text: string | HTMLElement | Element): void;
124
+ /**
125
+ * 设置元素的HTML内容
126
+ * @param element 目标元素
127
+ * @param html (可选)HTML内容|元素
128
+ * @returns 如果传入了html,则返回undefined;否则返回HTML内容
129
+ * @example
130
+ * // 设置元素a.xx的文本内容为<b>abcd</b>
131
+ * DOMUtils.html(document.querySelector("a.xx"),"<b>abcd</b>")
132
+ * DOMUtils.html("a.xx","<b>abcd</b>")
133
+ * DOMUtils.html("a.xx",document.querySelector("b"))
134
+ * */
135
+ html(element: HTMLElement | string, html: string | HTMLElement | Element): void;
136
+ /**
137
+ * 获取元素的HTML内容
138
+ * @param element 目标元素
139
+ * @param html (可选)HTML内容|元素
140
+ * @returns 如果传入了html,则返回undefined;否则返回HTML内容
141
+ * @example
142
+ * // 设置元素a.xx的文本内容为<b>abcd</b>
143
+ * DOMUtils.html(document.querySelector("a.xx"),"<b>abcd</b>")
144
+ * DOMUtils.html("a.xx","<b>abcd</b>")
145
+ * DOMUtils.html("a.xx",document.querySelector("b"))
146
+ * */
147
+ html(element: HTMLElement | string): string;
148
+ /**
149
+ * 绑定或触发元素的click事件
150
+ * @param element 目标元素
151
+ * @param handler (可选)事件处理函数
152
+ * @param details (可选)赋予触发的Event的额外属性
153
+ * @param useDispatchToTriggerEvent (可选)是否使用dispatchEvent来触发事件,默认true
154
+ * @example
155
+ * // 触发元素a.xx的click事件
156
+ * DOMUtils.click(document.querySelector("a.xx"))
157
+ * DOMUtils.click("a.xx")
158
+ * DOMUtils.click("a.xx",function(){
159
+ * console.log("触发click事件成功")
160
+ * })
161
+ * */
162
+ click(element: HTMLElement | string | Window, handler?: (event: PointerEvent | MouseEvent) => void, details?: object, useDispatchToTriggerEvent?: boolean): void;
163
+ /**
164
+ * 绑定或触发元素的blur事件
165
+ * @param element 目标元素
166
+ * @param handler (可选)事件处理函数
167
+ * @param details (可选)赋予触发的Event的额外属性
168
+ * @param useDispatchToTriggerEvent (可选)是否使用dispatchEvent来触发事件,默认true
169
+ * @example
170
+ * // 触发元素a.xx的blur事件
171
+ * DOMUtils.blur(document.querySelector("a.xx"))
172
+ * DOMUtils.blur("a.xx")
173
+ * DOMUtils.blur("a.xx",function(){
174
+ * console.log("触发blur事件成功")
175
+ * })
176
+ * */
177
+ blur(element: HTMLElement | string | Window, handler?: (event: Event) => void, details?: object, useDispatchToTriggerEvent?: boolean): void;
178
+ /**
179
+ * 绑定或触发元素的focus事件
180
+ * @param element 目标元素
181
+ * @param handler (可选)事件处理函数
182
+ * @param details (可选)赋予触发的Event的额外属性
183
+ * @param useDispatchToTriggerEvent (可选)是否使用dispatchEvent来触发事件,默认true
184
+ * @example
185
+ * // 触发元素a.xx的focus事件
186
+ * DOMUtils.focus(document.querySelector("a.xx"))
187
+ * DOMUtils.focus("a.xx")
188
+ * DOMUtils.focus("a.xx",function(){
189
+ * console.log("触发focus事件成功")
190
+ * })
191
+ * */
192
+ focus(element: HTMLElement | string | Window, handler?: (event: Event) => void, details?: object, useDispatchToTriggerEvent?: boolean): void;
193
+ /**
194
+ * 获取移动元素的transform偏移
195
+ */
196
+ getTransform(element: HTMLElement, isShow?: boolean): {
197
+ transformLeft: number;
198
+ transformTop: number;
199
+ };
200
+ /**
201
+ * 设置元素的value属性值
202
+ * @param element 目标元素
203
+ * @param value (可选)value属性值
204
+ * @returns 如果传入了value,则返回undefined;否则返回value属性值
205
+ * > true
206
+ * @example
207
+ * // 修改元素input.xx的复选框值为true
208
+ * DOMUtils.val(document.querySelector("input.xx"),true)
209
+ * DOMUtils.val("input.xx",true)
210
+ * */
211
+ val(element: HTMLInputElement | string, value: string | boolean): void;
212
+ /**
213
+ * 获取value属性值
214
+ * @param element 目标元素
215
+ * @example
216
+ * // 获取元素textarea的值
217
+ * DOMUtils.val(document.querySelector("textarea.xx"))
218
+ * */
219
+ val(element: HTMLInputElement | string): string;
220
+ /**
221
+ * 获取value属性值
222
+ * @param element 目标元素
223
+ * @example
224
+ * // 获取元素input.xx的复选框值
225
+ * DOMUtils.val(document.querySelector("input.xx"))
226
+ * DOMUtils.val("input.xx")
227
+ * */
228
+ val(element: HTMLInputElement): boolean | string;
229
+ /**
230
+ * 获取元素的属性值
231
+ * @param element 目标元素
232
+ * @param propName 属性名
233
+ * @param propValue 属性值
234
+ * @example
235
+ * // 获取元素a.xx的属性data-value
236
+ * DOMUtils.val(document.querySelector("a.xx"),"data-value")
237
+ * DOMUtils.val("a.xx","data-value")
238
+ * > undefined
239
+ * */
240
+ prop<T extends any>(element: HTMLElement | string, propName: string): T;
241
+ /**
242
+ * 设置元素的属性值
243
+ * @param element 目标元素
244
+ * @param propName 属性名
245
+ * @param propValue 属性值
246
+ * @example
247
+ * // 设置元素a.xx的属性data-value为1
248
+ * DOMUtils.val(document.querySelector("a.xx"),"data-value",1)
249
+ * DOMUtils.val("a.xx","data-value",1)
250
+ * */
251
+ prop<T extends any>(element: HTMLElement | string, propName: string, propValue: T): void;
252
+ /**
253
+ * 移除元素的属性
254
+ * @param element 目标元素
255
+ * @param attrName 属性名
256
+ * @example
257
+ * // 移除元素a.xx的属性data-value
258
+ * DOMUtils.removeAttr(document.querySelector("a.xx"),"data-value")
259
+ * DOMUtils.removeAttr("a.xx","data-value")
260
+ * */
261
+ removeAttr(element: HTMLElement | string, attrName: string): void;
262
+ /**
263
+ * 移除元素class名
264
+ * @param element 目标元素
265
+ * @param className 类名
266
+ * @example
267
+ * // 移除元素a.xx的className为xx
268
+ * DOMUtils.removeClass(document.querySelector("a.xx"),"xx")
269
+ * DOMUtils.removeClass("a.xx","xx")
270
+ */
271
+ removeClass(element: HTMLElement | string, className: string): void;
272
+ /**
273
+ * 移除元素的属性
274
+ * @param element 目标元素
275
+ * @param propName 属性名
276
+ * @example
277
+ * // 移除元素a.xx的href属性
278
+ * DOMUtils.removeProp(document.querySelector("a.xx"),"href")
279
+ * DOMUtils.removeProp("a.xx","href")
280
+ * */
281
+ removeProp(element: HTMLElement | string, propName: string): void;
282
+ /**
283
+ * 将一个元素替换为另一个元素
284
+ * @param element 目标元素
285
+ * @param newElement 新元素
286
+ * @example
287
+ * // 替换元素a.xx为b.xx
288
+ * DOMUtils.replaceWith(document.querySelector("a.xx"),document.querySelector("b.xx"))
289
+ * DOMUtils.replaceWith("a.xx",'<b class="xx"></b>')
290
+ */
291
+ replaceWith(element: HTMLElement | string | NodeList | HTMLElement[] | Node, newElement: HTMLElement | string | Node): void;
292
+ /**
293
+ * 给元素添加class
294
+ * @param element 目标元素
295
+ * @param className class名
296
+ * @example
297
+ * // 元素a.xx的className添加_vue_
298
+ * DOMUtils.addClass(document.querySelector("a.xx"),"_vue_")
299
+ * DOMUtils.addClass("a.xx","_vue_")
300
+ * */
301
+ addClass(element: HTMLElement | string, className: string): void;
302
+ /**
303
+ * 函数在元素内部末尾添加子元素或HTML字符串
304
+ * @param element 目标元素
305
+ * @param content 子元素或HTML字符串
306
+ * @example
307
+ * // 元素a.xx的内部末尾添加一个元素
308
+ * DOMUtils.append(document.querySelector("a.xx"),document.querySelector("b.xx"))
309
+ * DOMUtils.append("a.xx","'<b class="xx"></b>")
310
+ * */
311
+ append(element: HTMLElement | string, content: HTMLElement | string): void;
312
+ /**
313
+ * 函数 在元素内部开头添加子元素或HTML字符串
314
+ * @param element 目标元素
315
+ * @param content 子元素或HTML字符串
316
+ * @example
317
+ * // 元素a.xx内部开头添加一个元素
318
+ * DOMUtils.prepend(document.querySelector("a.xx"),document.querySelector("b.xx"))
319
+ * DOMUtils.prepend("a.xx","'<b class="xx"></b>")
320
+ * */
321
+ prepend(element: HTMLElement | string, content: HTMLElement | string): void;
322
+ /**
323
+ * 在元素后面添加兄弟元素或HTML字符串
324
+ * @param element 目标元素
325
+ * @param content 兄弟元素或HTML字符串
326
+ * @example
327
+ * // 元素a.xx后面添加一个元素
328
+ * DOMUtils.after(document.querySelector("a.xx"),document.querySelector("b.xx"))
329
+ * DOMUtils.after("a.xx","'<b class="xx"></b>")
330
+ * */
331
+ after(element: HTMLElement | string, content: HTMLElement | string): void;
332
+ /**
333
+ * 在元素前面添加兄弟元素或HTML字符串
334
+ * @param element 目标元素
335
+ * @param content 兄弟元素或HTML字符串
336
+ * @example
337
+ * // 元素a.xx前面添加一个元素
338
+ * DOMUtils.before(document.querySelector("a.xx"),document.querySelector("b.xx"))
339
+ * DOMUtils.before("a.xx","'<b class="xx"></b>")
340
+ * */
341
+ before(element: HTMLElement | string, content: HTMLElement | string): void;
342
+ /**
343
+ * 移除元素
344
+ * @param target 目标元素
345
+ * @example
346
+ * // 元素a.xx前面添加一个元素
347
+ * DOMUtils.remove(document.querySelector("a.xx"))
348
+ * DOMUtils.remove(document.querySelectorAll("a.xx"))
349
+ * DOMUtils.remove("a.xx")
350
+ * */
351
+ remove(target: HTMLElement | string | NodeList | HTMLElement[]): void;
352
+ /**
353
+ * 移除元素的所有子元素
354
+ * @param element 目标元素
355
+ * @example
356
+ * // 移除元素a.xx元素的所有子元素
357
+ * DOMUtils.empty(document.querySelector("a.xx"))
358
+ * DOMUtils.empty("a.xx")
359
+ * */
360
+ empty(element: HTMLElement | string): void;
361
+ /**
362
+ * 绑定事件
363
+ * @param element 需要绑定的元素|元素数组|window
364
+ * @param eventType 需要监听的事件
365
+ * @param callback 绑定事件触发的回调函数
366
+ * @param option
367
+ * + capture 表示事件是否在捕获阶段触发。默认为false,即在冒泡阶段触发
368
+ * + once 表示事件是否只触发一次。默认为false
369
+ * + passive 表示事件监听器是否不会调用preventDefault()。默认为false
370
+ * @example
371
+ * // 监听元素a.xx的click事件
372
+ * DOMUtils.on(document.querySelector("a.xx"),"click",(event)=>{
373
+ * console.log("事件触发",event)
374
+ * })
375
+ * DOMUtils.on("a.xx","click",(event)=>{
376
+ * console.log("事件触发",event)
377
+ * })
378
+ */
379
+ on<T extends Event>(element: HTMLElement | string | NodeList | HTMLElement[] | Window | Document | Element | null | typeof globalThis, eventType: DOMUtils_EventType | DOMUtils_EventType[], callback: (event: T) => void, option?: boolean | AddEventListenerOptions): void;
380
+ /**
381
+ * 绑定事件
382
+ * @param element 需要绑定的元素|元素数组|window
383
+ * @param eventType 需要监听的事件
384
+ * @param callback 绑定事件触发的回调函数
385
+ * @param option
386
+ * + capture 表示事件是否在捕获阶段触发。默认为false,即在冒泡阶段触发
387
+ * + once 表示事件是否只触发一次。默认为false
388
+ * + passive 表示事件监听器是否不会调用preventDefault()。默认为false
389
+ * @example
390
+ * // 监听元素a.xx的click事件
391
+ * DOMUtils.on(document.querySelector("a.xx"),"click",(event)=>{
392
+ * console.log("事件触发",event)
393
+ * })
394
+ * DOMUtils.on("a.xx","click",(event)=>{
395
+ * console.log("事件触发",event)
396
+ * })
397
+ */
398
+ on<T extends Event>(element: HTMLElement | string | NodeList | HTMLElement[] | Window | Document | Element | null | typeof globalThis, eventType: string, callback: (event: T) => void, option?: boolean | AddEventListenerOptions): void;
399
+ /**
400
+ * 绑定事件
401
+ * @param element 需要绑定的元素|元素数组|window
402
+ * @param eventType 需要监听的事件
403
+ * @param selector 子元素选择器
404
+ * @param callback 绑定事件触发的回调函数
405
+ * @param option
406
+ * + capture 表示事件是否在捕获阶段触发。默认为false,即在冒泡阶段触发
407
+ * + once 表示事件是否只触发一次。默认为false
408
+ * + passive 表示事件监听器是否不会调用preventDefault()。默认为false
409
+ * @example
410
+ * // 监听元素a.xx的click、tap、hover事件
411
+ * DOMUtils.on(document.querySelector("a.xx"),"click tap hover",(event)=>{
412
+ * console.log("事件触发",event)
413
+ * })
414
+ * DOMUtils.on("a.xx",["click","tap","hover"],(event)=>{
415
+ * console.log("事件触发",event)
416
+ * })
417
+ * @example
418
+ * // 监听全局document下的子元素a.xx的click事件
419
+ * DOMUtils.on(document,"click tap hover","a.xx",(event)=>{
420
+ * console.log("事件触发",event)
421
+ * })
422
+ */
423
+ on<T extends Event>(element: HTMLElement | string | NodeList | HTMLElement[] | Window | Document | Element | null | typeof globalThis, eventType: DOMUtils_EventType | DOMUtils_EventType[], selector: string | undefined | null, callback: (event: T) => void, option?: boolean | AddEventListenerOptions): void;
424
+ /**
425
+ * 绑定事件
426
+ * @param element 需要绑定的元素|元素数组|window
427
+ * @param eventType 需要监听的事件
428
+ * @param selector 子元素选择器
429
+ * @param callback 绑定事件触发的回调函数
430
+ * @param option
431
+ * + capture 表示事件是否在捕获阶段触发。默认为false,即在冒泡阶段触发
432
+ * + once 表示事件是否只触发一次。默认为false
433
+ * + passive 表示事件监听器是否不会调用preventDefault()。默认为false
434
+ * @example
435
+ * // 监听元素a.xx的click、tap、hover事件
436
+ * DOMUtils.on(document.querySelector("a.xx"),"click tap hover",(event)=>{
437
+ * console.log("事件触发",event)
438
+ * })
439
+ * DOMUtils.on("a.xx",["click","tap","hover"],(event)=>{
440
+ * console.log("事件触发",event)
441
+ * })
442
+ * @example
443
+ * // 监听全局document下的子元素a.xx的click事件
444
+ * DOMUtils.on(document,"click tap hover","a.xx",(event)=>{
445
+ * console.log("事件触发",event)
446
+ * })
447
+ */
448
+ on<T extends Event>(element: HTMLElement | string | NodeList | HTMLElement[] | Window | Document | Element | null | typeof globalThis, eventType: string, selector: string | undefined | null, callback: (event: T) => void, option?: boolean | AddEventListenerOptions): void;
449
+ /**
450
+ * 取消绑定事件
451
+ * @param element 需要取消绑定的元素|元素数组
452
+ * @param eventType 需要取消监听的事件
453
+ * @param callback 通过DOMUtils.on绑定的事件函数
454
+ * @param option
455
+ * + capture 如果在添加事件监听器时指定了useCapture为true,则在移除事件监听器时也必须指定为true
456
+ * @param filter (可选)过滤函数,对元素属性上的事件进行过滤出想要删除的事件
457
+ * @example
458
+ * // 取消监听元素a.xx的click事件
459
+ * DOMUtils.off(document.querySelector("a.xx"),"click")
460
+ * DOMUtils.off("a.xx","click")
461
+ */
462
+ off<T extends Event>(element: HTMLElement | string | NodeList | HTMLElement[] | Window | Document | Element | null | typeof globalThis, eventType: DOMUtils_EventType | DOMUtils_EventType[], callback?: (event: T) => void, option?: boolean | AddEventListenerOptions, filter?: (value: DOMUtilsEventListenerOptionsAttribute, index: number, array: DOMUtilsEventListenerOptionsAttribute[]) => boolean): void;
463
+ /**
464
+ * 取消绑定事件
465
+ * @param element 需要取消绑定的元素|元素数组
466
+ * @param eventType 需要取消监听的事件
467
+ * @param callback 通过DOMUtils.on绑定的事件函数
468
+ * @param option
469
+ * + capture 如果在添加事件监听器时指定了useCapture为true,则在移除事件监听器时也必须指定为true
470
+ * @param filter (可选)过滤函数,对元素属性上的事件进行过滤出想要删除的事件
471
+ * @example
472
+ * // 取消监听元素a.xx的click事件
473
+ * DOMUtils.off(document.querySelector("a.xx"),"click")
474
+ * DOMUtils.off("a.xx","click")
475
+ */
476
+ off<T extends Event>(element: HTMLElement | string | NodeList | HTMLElement[] | Window | Document | Element | null | typeof globalThis, eventType: string, callback?: (event: T) => void, option?: boolean | AddEventListenerOptions, filter?: (value: DOMUtilsEventListenerOptionsAttribute, index: number, array: DOMUtilsEventListenerOptionsAttribute[]) => boolean): void;
477
+ /**
478
+ * 取消绑定事件
479
+ * @param element 需要取消绑定的元素|元素数组
480
+ * @param eventType 需要取消监听的事件
481
+ * @param selector 子元素选择器
482
+ * @param callback 通过DOMUtils.on绑定的事件函数
483
+ * @param option
484
+ * + capture 如果在添加事件监听器时指定了useCapture为true,则在移除事件监听器时也必须指定为true
485
+ * @param filter (可选)过滤函数,对元素属性上的事件进行过滤出想要删除的事件
486
+ * @example
487
+ * // 取消监听元素a.xx的click、tap、hover事件
488
+ * DOMUtils.off(document.querySelector("a.xx"),"click tap hover")
489
+ * DOMUtils.off("a.xx",["click","tap","hover"])
490
+ */
491
+ off<T extends Event>(element: HTMLElement | string | NodeList | HTMLElement[] | Window | Document | Element | null | typeof globalThis, eventType: DOMUtils_EventType | DOMUtils_EventType[], selector?: string | undefined, callback?: (event: T) => void, option?: boolean | AddEventListenerOptions, filter?: (value: DOMUtilsEventListenerOptionsAttribute, index: number, array: DOMUtilsEventListenerOptionsAttribute[]) => boolean): void;
492
+ /**
493
+ * 取消绑定事件
494
+ * @param element 需要取消绑定的元素|元素数组
495
+ * @param eventType 需要取消监听的事件
496
+ * @param selector 子元素选择器
497
+ * @param callback 通过DOMUtils.on绑定的事件函数
498
+ * @param option
499
+ * + capture 如果在添加事件监听器时指定了useCapture为true,则在移除事件监听器时也必须指定为true
500
+ * @param filter (可选)过滤函数,对元素属性上的事件进行过滤出想要删除的事件
501
+ * @example
502
+ * // 取消监听元素a.xx的click、tap、hover事件
503
+ * DOMUtils.off(document.querySelector("a.xx"),"click tap hover")
504
+ * DOMUtils.off("a.xx",["click","tap","hover"])
505
+ */
506
+ off<T extends Event>(element: HTMLElement | string | NodeList | HTMLElement[] | Window | Document | Element | null | typeof globalThis, eventType: string, selector?: string | undefined, callback?: (event: T) => void, option?: boolean | AddEventListenerOptions, filter?: (value: DOMUtilsEventListenerOptionsAttribute, index: number, array: DOMUtilsEventListenerOptionsAttribute[]) => boolean): void;
507
+ /**
508
+ * 取消绑定所有的事件
509
+ * @param element 需要取消绑定的元素|元素数组
510
+ * @param eventType (可选)需要取消监听的事件
511
+ */
512
+ offAll(element: HTMLElement | string | NodeList | HTMLElement[] | Window | Element | null, eventType?: string): void;
513
+ /**
514
+ * 取消绑定所有的事件
515
+ * @param element 需要取消绑定的元素|元素数组
516
+ * @param eventType (可选)需要取消监听的事件
517
+ */
518
+ offAll(element: HTMLElement | string | NodeList | HTMLElement[] | Window | Element | null, eventType?: DOMUtils_EventType | DOMUtils_EventType[]): void;
519
+ /**
520
+ * 主动触发事件
521
+ * @param element 需要触发的元素|元素数组|window
522
+ * @param eventType 需要触发的事件
523
+ * @param details 赋予触发的Event的额外属性,如果是Event类型,那么将自动代替默认new的Event对象
524
+ * @param useDispatchToTriggerEvent 是否使用dispatchEvent来触发事件,默认true
525
+ * @example
526
+ * // 触发元素a.xx的click事件
527
+ * DOMUtils.trigger(document.querySelector("a.xx"),"click")
528
+ * DOMUtils.trigger("a.xx","click")
529
+ * // 触发元素a.xx的click、tap、hover事件
530
+ * DOMUtils.trigger(document.querySelector("a.xx"),"click tap hover")
531
+ * DOMUtils.trigger("a.xx",["click","tap","hover"])
532
+ */
533
+ trigger(element: HTMLElement | string | NodeList | any[] | Window | Document, eventType: string, details?: object, useDispatchToTriggerEvent?: boolean): void;
534
+ /**
535
+ * 主动触发事件
536
+ * @param element 需要触发的元素|元素数组|window
537
+ * @param eventType 需要触发的事件
538
+ * @param details 赋予触发的Event的额外属性,如果是Event类型,那么将自动代替默认new的Event对象
539
+ * @param useDispatchToTriggerEvent 是否使用dispatchEvent来触发事件,默认true
540
+ * @example
541
+ * // 触发元素a.xx的click事件
542
+ * DOMUtils.trigger(document.querySelector("a.xx"),"click")
543
+ * DOMUtils.trigger("a.xx","click")
544
+ * // 触发元素a.xx的click、tap、hover事件
545
+ * DOMUtils.trigger(document.querySelector("a.xx"),"click tap hover")
546
+ * DOMUtils.trigger("a.xx",["click","tap","hover"])
547
+ */
548
+ trigger(element: HTMLElement | string | NodeList | any[] | Window | Document, eventType: DOMUtils_EventType | DOMUtils_EventType[], details?: object, useDispatchToTriggerEvent?: boolean): void;
549
+ /**
550
+ * 获取元素相对于文档的偏移坐标(加上文档的滚动条)
551
+ * @param element 目标元素
552
+ * @example
553
+ * // 获取元素a.xx的对于文档的偏移坐标
554
+ * DOMUtils.offset(document.querySelector("a.xx"))
555
+ * DOMUtils.offset("a.xx")
556
+ * > 0
557
+ */
558
+ offset(element: HTMLElement | string): {
559
+ /** y轴偏移 */
560
+ top: number;
561
+ /** x轴偏移 */
562
+ left: number;
563
+ } | undefined;
564
+ /**
565
+ * 获取元素的宽度
566
+ * @param element 要获取宽度的元素
567
+ * @param isShow 是否已进行isShow,避免爆堆栈
568
+ * @returns 元素的宽度,单位为像素
569
+ * @example
570
+ * // 获取元素a.xx的宽度
571
+ * DOMUtils.width(document.querySelector("a.xx"))
572
+ * DOMUtils.width("a.xx")
573
+ * > 100
574
+ * // 获取window的宽度
575
+ * DOMUtils.width(window)
576
+ * > 400
577
+ * @example
578
+ * // 设置元素a.xx的宽度为200
579
+ * DOMUtils.width(document.querySelector("a.xx"),200)
580
+ * DOMUtils.width("a.xx",200)
581
+ */
582
+ width(element: HTMLElement | string | Window | Document, isShow?: boolean): number;
583
+ /**
584
+ * 获取元素的高度
585
+ * @param element 要获取高度的元素
586
+ * @param isShow 是否已进行isShow,避免爆堆栈
587
+ * @returns 元素的高度,单位为像素
588
+ * @example
589
+ * // 获取元素a.xx的高度
590
+ * DOMUtils.height(document.querySelector("a.xx"))
591
+ * DOMUtils.height("a.xx")
592
+ * > 100
593
+ * // 获取window的高度
594
+ * DOMUtils.height(window)
595
+ * > 700
596
+ * @example
597
+ * // 设置元素a.xx的高度为200
598
+ * DOMUtils.height(document.querySelector("a.xx"),200)
599
+ * DOMUtils.height("a.xx",200)
600
+ */
601
+ height(element: HTMLElement | string | Window | Document, isShow?: boolean): number;
602
+ /**
603
+ * 获取元素的外部宽度(包括边框和外边距)
604
+ * @param {HTMLElement|string} element 要获取外部宽度的元素
605
+ * @param {boolean} [isShow=false] 是否已进行isShow,避免爆堆栈
606
+ * @returns {number} 元素的外部宽度,单位为像素
607
+ * @example
608
+ * // 获取元素a.xx的外部宽度
609
+ * DOMUtils.outerWidth(document.querySelector("a.xx"))
610
+ * DOMUtils.outerWidth("a.xx")
611
+ * > 100
612
+ * // 获取window的外部宽度
613
+ * DOMUtils.outerWidth(window)
614
+ * > 400
615
+ */
616
+ outerWidth(element: HTMLElement | string | Window | Document, isShow?: boolean): number;
617
+ /**
618
+ * 获取元素的外部高度(包括边框和外边距)
619
+ * @param {HTMLElement|string} element 要获取外部高度的元素
620
+ * @param {boolean} [isShow=false] 是否已进行isShow,避免爆堆栈
621
+ * @returns {number} 元素的外部高度,单位为像素
622
+ * @example
623
+ * // 获取元素a.xx的外部高度
624
+ * DOMUtils.outerHeight(document.querySelector("a.xx"))
625
+ * DOMUtils.outerHeight("a.xx")
626
+ * > 100
627
+ * // 获取window的外部高度
628
+ * DOMUtils.outerHeight(window)
629
+ * > 700
630
+ */
631
+ outerHeight(element: HTMLElement | string | Window, isShow?: boolean): number;
632
+ /**
633
+ * 等待文档加载完成后执行指定的函数
634
+ * @param callback 需要执行的函数
635
+ * @example
636
+ * DOMUtils.ready(function(){
637
+ * console.log("文档加载完毕")
638
+ * })
639
+ */
640
+ ready(callback: () => void): void;
641
+ /**
642
+ * 在一定时间内改变元素的样式属性,实现动画效果
643
+ * @param element 需要进行动画的元素
644
+ * @param styles 动画结束时元素的样式属性
645
+ * @param duration 动画持续时间,单位为毫秒
646
+ * @param callback 动画结束后执行的函数
647
+ * @example
648
+ * // 监听元素a.xx的从显示变为隐藏
649
+ * DOMUtils.animate(document.querySelector("a.xx"),{ top:100},1000,function(){
650
+ * console.log("已往上位移100px")
651
+ * })
652
+ */
653
+ animate(element: HTMLElement | string, styles: CSSStyleDeclaration, duration?: number, callback?: (() => void) | undefined | null): void;
654
+ /**
655
+ * 将一个元素包裹在指定的HTML元素中
656
+ * @param element 要包裹的元素
657
+ * @param wrapperHTML 要包裹的HTML元素的字符串表示形式
658
+ * @example
659
+ * // 将a.xx元素外面包裹一层div
660
+ * DOMUtils.wrap(document.querySelector("a.xx"),"<div></div>")
661
+ */
662
+ wrap(element: HTMLElement | string | Node, wrapperHTML: string): void;
663
+ /**
664
+ * 获取当前元素的前一个兄弟元素
665
+ * @param element 当前元素
666
+ * @returns 前一个兄弟元素
667
+ * @example
668
+ * // 获取a.xx元素前一个兄弟元素
669
+ * DOMUtils.prev(document.querySelector("a.xx"))
670
+ * DOMUtils.prev("a.xx")
671
+ * > <div ...>....</div>
672
+ */
673
+ prev(element: HTMLElement | string): HTMLElement;
674
+ /**
675
+ * 获取当前元素的后一个兄弟元素
676
+ * @param element 当前元素
677
+ * @returns 后一个兄弟元素
678
+ * @example
679
+ * // 获取a.xx元素前一个兄弟元素
680
+ * DOMUtils.next(document.querySelector("a.xx"))
681
+ * DOMUtils.next("a.xx")
682
+ * > <div ...>....</div>
683
+ */
684
+ next(element: HTMLElement | string): HTMLElement;
685
+ /**
686
+ * 取消挂载在window下的DOMUtils并返回DOMUtils
687
+ * @example
688
+ * let DOMUtils = window.DOMUtils.noConflict()
689
+ */
690
+ noConflict(): this;
691
+ /**
692
+ * 获取当前元素的所有兄弟元素
693
+ * @param element 当前元素
694
+ * @returns 所有兄弟元素
695
+ * @example
696
+ * // 获取a.xx元素所有兄弟元素
697
+ * DOMUtils.siblings(document.querySelector("a.xx"))
698
+ * DOMUtils.siblings("a.xx")
699
+ * > (3) [div.logo-wrapper, div.forum-block, div.more-btn-desc]
700
+ */
701
+ siblings(element: HTMLElement | string): HTMLElement[];
702
+ /**
703
+ * 获取当前元素的父元素
704
+ * @param element 当前元素
705
+ * @returns 父元素
706
+ * @example
707
+ * // 获取a.xx元素的父元素
708
+ * DOMUtils.parent(document.querySelector("a.xx"))
709
+ * DOMUtils.parent("a.xx")
710
+ * > <div ...>....</div>
711
+ */
712
+ parent(element: HTMLElement | string): HTMLElement;
713
+ /**
714
+ * 获取当前元素的父元素
715
+ * @param element 当前元素
716
+ * @returns 父元素
717
+ * @example
718
+ * // 获取a.xx元素的父元素
719
+ * DOMUtils.parent(document.querySelector("a.xx"))
720
+ * DOMUtils.parent("a.xx")
721
+ * > <div ...>....</div>
722
+ */
723
+ parent(element: HTMLElement[] | NodeList): HTMLElement[];
724
+ /**
725
+ * 将字符串转为Element元素
726
+ * @param html
727
+ * @param useParser (可选)是否使用DOMParser来生成元素,有些时候通过DOMParser生成的元素有点问题
728
+ * + true 使用DOMPraser来转换字符串
729
+ * + false 创建一个div,里面放入字符串,然后提取firstChild
730
+ * @param isComplete (可选)是否是完整的
731
+ * + true 如果useParser为true,那么返回整个使用DOMParser转换成的Document
732
+ * 如果useParser为false,返回一个DIV元素,DIV元素内包裹着需要转换的字符串
733
+ * + false 如果useParser为true,那么返回整个使用DOMParser转换成的Document的body
734
+ * 如果useParser为false,返回一个DIV元素的firstChild
735
+ * @example
736
+ * // 将字符串转为Element元素
737
+ * DOMUtils.parseHTML("<a href='xxxx'></a>")
738
+ * > <a href="xxxx"></a>
739
+ * @example
740
+ * // 使用DOMParser将字符串转为Element元素
741
+ * DOMUtils.parseHTML("<a href='xxxx'></a>",true)
742
+ * > <a href="xxxx"></a>
743
+ * @example
744
+ * // 由于需要转换的元素是多个元素,将字符串转为完整的Element元素
745
+ * DOMUtils.parseHTML("<a href='xxxx'></a><a href='xxxx'></a>",false, true)
746
+ * > <div><a href="xxxx"></a><a href='xxxx'></a></div>
747
+ * @example
748
+ * // 由于需要转换的元素是多个元素,使用DOMParser将字符串转为完整的Element元素
749
+ * DOMUtils.parseHTML("<a href='xxxx'></a><a href='xxxx'></a>",true, true)
750
+ * > #document
751
+ */
752
+ parseHTML<T1 extends boolean, T2 extends boolean>(html: string, useParser?: T1, isComplete?: T2): ParseHTMLReturnType<T1, T2>;
753
+ /**
754
+ * 当鼠标移入或移出元素时触发事件
755
+ * @param element 当前元素
756
+ * @param handler 事件处理函数
757
+ * @param option 配置
758
+ * @example
759
+ * // 监听a.xx元素的移入或移出
760
+ * DOMUtils.hover(document.querySelector("a.xx"),()=>{
761
+ * console.log("移入/移除");
762
+ * })
763
+ * DOMUtils.hover("a.xx",()=>{
764
+ * console.log("移入/移除");
765
+ * })
766
+ */
767
+ hover(element: HTMLElement | string, handler: (event: Event) => void, option?: boolean | AddEventListenerOptions): void;
768
+ /**
769
+ * 显示元素
770
+ * @param target 当前元素
771
+ * @example
772
+ * // 显示a.xx元素
773
+ * DOMUtils.show(document.querySelector("a.xx"))
774
+ * DOMUtils.show(document.querySelectorAll("a.xx"))
775
+ * DOMUtils.show("a.xx")
776
+ */
777
+ show(target: HTMLElement | string | NodeList | HTMLElement[]): void;
778
+ /**
779
+ * 隐藏元素
780
+ * @param target 当前元素
781
+ * @example
782
+ * // 隐藏a.xx元素
783
+ * DOMUtils.hide(document.querySelector("a.xx"))
784
+ * DOMUtils.hide(document.querySelectorAll("a.xx"))
785
+ * DOMUtils.hide("a.xx")
786
+ */
787
+ hide(target: HTMLElement | string | NodeList | HTMLElement[]): void;
788
+ /**
789
+ * 当按键松开时触发事件
790
+ * keydown - > keypress - > keyup
791
+ * @param target 当前元素
792
+ * @param handler 事件处理函数
793
+ * @param option 配置
794
+ * @example
795
+ * // 监听a.xx元素的按键松开
796
+ * DOMUtils.keyup(document.querySelector("a.xx"),()=>{
797
+ * console.log("按键松开");
798
+ * })
799
+ * DOMUtils.keyup("a.xx",()=>{
800
+ * console.log("按键松开");
801
+ * })
802
+ */
803
+ keyup(target: HTMLElement | string | Window | typeof globalThis, handler: (event: KeyboardEvent) => void, option?: boolean | AddEventListenerOptions): void;
804
+ /**
805
+ * 当按键按下时触发事件
806
+ * keydown - > keypress - > keyup
807
+ * @param target 目标
808
+ * @param handler 事件处理函数
809
+ * @param option 配置
810
+ * @example
811
+ * // 监听a.xx元素的按键按下
812
+ * DOMUtils.keydown(document.querySelector("a.xx"),()=>{
813
+ * console.log("按键按下");
814
+ * })
815
+ * DOMUtils.keydown("a.xx",()=>{
816
+ * console.log("按键按下");
817
+ * })
818
+ */
819
+ keydown(target: HTMLElement | Window | typeof globalThis | string, handler: (event: KeyboardEvent) => void, option?: boolean | AddEventListenerOptions): void;
820
+ /**
821
+ * 当按键按下时触发事件
822
+ * keydown - > keypress - > keyup
823
+ * @param target 目标
824
+ * @param handler 事件处理函数
825
+ * @param option 配置
826
+ * @example
827
+ * // 监听a.xx元素的按键按下
828
+ * DOMUtils.keypress(document.querySelector("a.xx"),()=>{
829
+ * console.log("按键按下");
830
+ * })
831
+ * DOMUtils.keypress("a.xx",()=>{
832
+ * console.log("按键按下");
833
+ * })
834
+ */
835
+ keypress(target: HTMLElement | Window | typeof globalThis | string, handler: (event: KeyboardEvent) => void, option?: boolean | AddEventListenerOptions): void;
836
+ /**
837
+ * 淡入元素
838
+ * @param element 当前元素
839
+ * @param duration 动画持续时间(毫秒),默认400毫秒
840
+ * @param callback 动画结束的回调
841
+ * @example
842
+ * // 元素a.xx淡入
843
+ * DOMUtils.fadeIn(document.querySelector("a.xx"),2500,()=>{
844
+ * console.log("淡入完毕");
845
+ * })
846
+ * DOMUtils.fadeIn("a.xx",undefined,()=>{
847
+ * console.log("淡入完毕");
848
+ * })
849
+ */
850
+ fadeIn(element: HTMLElement | string, duration?: number, callback?: () => void): void;
851
+ /**
852
+ * 淡出元素
853
+ * @param element 当前元素
854
+ * @param duration 动画持续时间(毫秒),默认400毫秒
855
+ * @param callback 动画结束的回调
856
+ * @example
857
+ * // 元素a.xx淡出
858
+ * DOMUtils.fadeOut(document.querySelector("a.xx"),2500,()=>{
859
+ * console.log("淡出完毕");
860
+ * })
861
+ * DOMUtils.fadeOut("a.xx",undefined,()=>{
862
+ * console.log("淡出完毕");
863
+ * })
864
+ */
865
+ fadeOut(element: HTMLElement | string, duration?: number, callback?: () => void): void;
866
+ /**
867
+ * 切换元素的显示和隐藏状态
868
+ * @param element 当前元素
869
+ * @example
870
+ * // 如果元素a.xx当前是隐藏,则显示,如果是显示,则隐藏
871
+ * DOMUtils.toggle(document.querySelector("a.xx"))
872
+ * DOMUtils.toggle("a.xx")
873
+ */
874
+ toggle(element: HTMLElement | string): void;
875
+ }
876
+ declare let domUtils: DOMUtils;
877
+ export { domUtils as DOMUtils };