@whitesev/domutils 1.3.3 → 1.3.5

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.
package/src/DOMUtils.ts CHANGED
@@ -3,15 +3,26 @@ import {
3
3
  type DOMUtilsCreateElementAttributesMap,
4
4
  DOMUtilsEvent,
5
5
  } from "./DOMUtilsEvent";
6
- import { ParseHTMLReturnType } from "./types/global";
6
+ import {
7
+ ParseHTMLReturnType,
8
+ type DOMUtilsTargetElementType,
9
+ } from "./types/global";
7
10
  import { type UtilsWindowApiOption } from "./WindowApi";
8
11
 
12
+ /**
13
+ * 判断是否是元素列表
14
+ * @param $ele
15
+ */
16
+ export const isNodeList = ($ele: any): $ele is any[] | NodeList => {
17
+ return Array.isArray($ele) || $ele instanceof NodeList;
18
+ };
19
+
9
20
  class DOMUtils extends DOMUtilsEvent {
10
21
  constructor(option?: UtilsWindowApiOption) {
11
22
  super(option);
12
23
  }
13
24
  /** 版本号 */
14
- version = "2024.9.23";
25
+ version = "2024.10.22";
15
26
  /**
16
27
  * 获取元素的属性值
17
28
  * @param element 目标元素
@@ -22,7 +33,7 @@ class DOMUtils extends DOMUtilsEvent {
22
33
  * DOMUtils.attr("a.xx","href");
23
34
  * > https://xxxx....
24
35
  */
25
- attr(element: HTMLElement | string, attrName: string): string;
36
+ attr(element: DOMUtilsTargetElementType, attrName: string): string;
26
37
  /**
27
38
  * 设置元素的属性值
28
39
  * @param element 目标元素
@@ -34,20 +45,34 @@ class DOMUtils extends DOMUtilsEvent {
34
45
  * DOMUtils.attr("a.xx","href","abcd");
35
46
  */
36
47
  attr(
37
- element: HTMLElement | string,
48
+ element: DOMUtilsTargetElementType,
38
49
  attrName: string,
39
- attrValue: string
50
+ attrValue: string | boolean | number
40
51
  ): void;
41
- attr(element: HTMLElement | string, attrName: string, attrValue?: string) {
52
+ attr(element: DOMUtilsTargetElementType, attrName: string, attrValue?: any) {
42
53
  let DOMUtilsContext = this;
43
54
  if (typeof element === "string") {
44
- element = DOMUtilsContext.windowApi.document.querySelector(
45
- element
46
- ) as HTMLElement;
55
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
47
56
  }
48
57
  if (element == null) {
49
58
  return;
50
59
  }
60
+ if (isNodeList(element)) {
61
+ if (attrValue == null) {
62
+ // 获取属性
63
+ return DOMUtilsContext.attr(
64
+ element[0] as HTMLElement,
65
+ attrName,
66
+ attrValue
67
+ );
68
+ } else {
69
+ // 设置属性
70
+ element.forEach(($ele) => {
71
+ DOMUtilsContext.attr($ele as HTMLElement, attrName, attrValue);
72
+ });
73
+ return;
74
+ }
75
+ }
51
76
  if (attrValue == null) {
52
77
  return element.getAttribute(attrName);
53
78
  } else {
@@ -127,7 +152,7 @@ class DOMUtils extends DOMUtilsEvent {
127
152
  * > "none"
128
153
  * */
129
154
  css(
130
- element: HTMLElement | string,
155
+ element: DOMUtilsTargetElementType,
131
156
  property: keyof CSSStyleDeclaration
132
157
  ): string;
133
158
  /**
@@ -140,7 +165,7 @@ class DOMUtils extends DOMUtilsEvent {
140
165
  * DOMUtils.css("a.xx","display");
141
166
  * > "none"
142
167
  * */
143
- css(element: HTMLElement | string, property: string): string;
168
+ css(element: DOMUtilsTargetElementType, property: string): string;
144
169
  /**
145
170
  * 设置元素的样式属性
146
171
  * @param element 目标元素
@@ -158,7 +183,7 @@ class DOMUtils extends DOMUtilsEvent {
158
183
  * DOMUtils.css(document.querySelector("a.xx"),"top",10);
159
184
  * */
160
185
  css(
161
- element: HTMLElement | string,
186
+ element: DOMUtilsTargetElementType,
162
187
  property: keyof CSSStyleDeclaration & string,
163
188
  value: string | number
164
189
  ): string;
@@ -177,7 +202,7 @@ class DOMUtils extends DOMUtilsEvent {
177
202
  * DOMUtils.css(document.querySelector("a.xx"),{ top: 10 });
178
203
  * */
179
204
  css(
180
- element: HTMLElement | string,
205
+ element: DOMUtilsTargetElementType,
181
206
  property:
182
207
  | {
183
208
  [P in keyof CSSStyleDeclaration]?: CSSStyleDeclaration[P];
@@ -187,7 +212,7 @@ class DOMUtils extends DOMUtilsEvent {
187
212
  }
188
213
  ): string;
189
214
  css(
190
- element: HTMLElement | string,
215
+ element: DOMUtilsTargetElementType,
191
216
  property:
192
217
  | keyof CSSStyleDeclaration
193
218
  | string
@@ -226,16 +251,38 @@ class DOMUtils extends DOMUtilsEvent {
226
251
  return propertyValue;
227
252
  }
228
253
  if (typeof element === "string") {
229
- element = DOMUtilsContext.windowApi.document.querySelector(
230
- element
231
- ) as HTMLElement;
254
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
232
255
  }
233
256
  if (element == null) {
234
257
  return;
235
258
  }
259
+ if (isNodeList(element)) {
260
+ if (typeof property === "string") {
261
+ if (value == null) {
262
+ // 获取属性
263
+ return DOMUtilsContext.css(element[0] as HTMLElement, property);
264
+ } else {
265
+ // 设置属性
266
+ element.forEach(($ele) => {
267
+ DOMUtilsContext.css($ele as HTMLElement, property);
268
+ });
269
+ return;
270
+ }
271
+ } else if (typeof property === "object") {
272
+ // 设置属性
273
+ element.forEach(($ele) => {
274
+ DOMUtilsContext.css($ele as HTMLElement, property as object);
275
+ });
276
+ return;
277
+ } else {
278
+ }
279
+ return;
280
+ }
236
281
  if (typeof property === "string") {
237
282
  if (value == null) {
238
- return getComputedStyle(element).getPropertyValue(property);
283
+ return DOMUtilsContext.windowApi.globalThis
284
+ .getComputedStyle(element)
285
+ .getPropertyValue(property);
239
286
  } else {
240
287
  if (value === "string" && value.includes("!important")) {
241
288
  element.style.setProperty(property, value, "important");
@@ -260,12 +307,12 @@ class DOMUtils extends DOMUtilsEvent {
260
307
  element.style.setProperty(prop, property[prop] as string);
261
308
  }
262
309
  }
310
+ } else {
263
311
  }
264
312
  }
265
313
  /**
266
- * 获取元素的文本内容
314
+ * 获取元素的文本内容,优先返回textContent
267
315
  * @param element 目标元素
268
- * @param text (可选)文本内容
269
316
  * @returns 如果传入了text,则返回undefined;否则返回文本内容
270
317
  * @example
271
318
  * // 设置元素a.xx的文本内容为abcd
@@ -273,7 +320,7 @@ class DOMUtils extends DOMUtilsEvent {
273
320
  * DOMUtils.text("a.xx","abcd")
274
321
  * DOMUtils.text("a.xx",document.querySelector("b"))
275
322
  * */
276
- text(element: HTMLElement | string): string;
323
+ text(element: DOMUtilsTargetElementType): string;
277
324
  /**
278
325
  * 设置元素的文本内容
279
326
  * @param element 目标元素
@@ -286,19 +333,29 @@ class DOMUtils extends DOMUtilsEvent {
286
333
  * DOMUtils.text("a.xx",document.querySelector("b"))
287
334
  * */
288
335
  text(
289
- element: HTMLElement | string,
290
- text: string | HTMLElement | Element
336
+ element: DOMUtilsTargetElementType,
337
+ text: string | HTMLElement | Element | number
291
338
  ): void;
292
- text(element: HTMLElement | string, text?: string | HTMLElement | Element) {
339
+ text(element: DOMUtilsTargetElementType, text?: any) {
293
340
  let DOMUtilsContext = this;
294
341
  if (typeof element === "string") {
295
- element = DOMUtilsContext.windowApi.document.querySelector(
296
- element
297
- ) as HTMLElement;
342
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
298
343
  }
299
344
  if (element == null) {
300
345
  return;
301
346
  }
347
+ if (isNodeList(element)) {
348
+ if (text == null) {
349
+ // 获取
350
+ return DOMUtilsContext.text(element[0] as HTMLElement);
351
+ } else {
352
+ // 设置
353
+ element.forEach(($ele) => {
354
+ DOMUtilsContext.text($ele as HTMLElement, text);
355
+ });
356
+ }
357
+ return;
358
+ }
302
359
  if (text == null) {
303
360
  return element.textContent || element.innerText;
304
361
  } else {
@@ -325,8 +382,8 @@ class DOMUtils extends DOMUtilsEvent {
325
382
  * DOMUtils.html("a.xx",document.querySelector("b"))
326
383
  * */
327
384
  html(
328
- element: HTMLElement | string,
329
- html: string | HTMLElement | Element
385
+ element: DOMUtilsTargetElementType,
386
+ html: string | HTMLElement | Element | number
330
387
  ): void;
331
388
  /**
332
389
  * 获取元素的HTML内容
@@ -339,21 +396,33 @@ class DOMUtils extends DOMUtilsEvent {
339
396
  * DOMUtils.html("a.xx","<b>abcd</b>")
340
397
  * DOMUtils.html("a.xx",document.querySelector("b"))
341
398
  * */
342
- html(element: HTMLElement | string): string;
343
- html(element: HTMLElement | string, html?: string | HTMLElement | Element) {
399
+ html(element: DOMUtilsTargetElementType): string;
400
+ html(element: DOMUtilsTargetElementType, html?: any) {
344
401
  let DOMUtilsContext = this;
345
402
  if (typeof element === "string") {
346
- element = DOMUtilsContext.windowApi.document.querySelector(
347
- element
348
- ) as HTMLElement;
403
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
349
404
  }
350
405
  if (element == null) {
351
406
  return;
352
407
  }
408
+ if (isNodeList(element)) {
409
+ if (html == null) {
410
+ // 获取
411
+ return DOMUtilsContext.html(element[0] as HTMLElement);
412
+ } else {
413
+ // 设置
414
+ element.forEach(($ele) => {
415
+ DOMUtilsContext.html($ele as HTMLElement, html);
416
+ });
417
+ }
418
+ return;
419
+ }
353
420
  if (html == null) {
421
+ // 获取
354
422
  return element.innerHTML;
355
423
  } else {
356
- if (html instanceof Node) {
424
+ // 设置
425
+ if (html instanceof Element) {
357
426
  html = html.innerHTML;
358
427
  }
359
428
  if ("innerHTML" in element) {
@@ -381,7 +450,8 @@ class DOMUtils extends DOMUtilsEvent {
381
450
  recovery();
382
451
  return transformInfo;
383
452
  }
384
- let elementTransform = getComputedStyle(element).transform;
453
+ let elementTransform =
454
+ DOMUtilsContext.windowApi.globalThis.getComputedStyle(element).transform;
385
455
  if (
386
456
  elementTransform != null &&
387
457
  elementTransform !== "none" &&
@@ -415,7 +485,15 @@ class DOMUtils extends DOMUtilsEvent {
415
485
  * DOMUtils.val(document.querySelector("input.xx"),true)
416
486
  * DOMUtils.val("input.xx",true)
417
487
  * */
418
- val(element: HTMLInputElement | string, value: string | boolean): void;
488
+ val(
489
+ element:
490
+ | HTMLInputElement
491
+ | HTMLTextAreaElement
492
+ | string
493
+ | (HTMLInputElement | HTMLTextAreaElement)[]
494
+ | NodeListOf<HTMLInputElement | HTMLTextAreaElement>,
495
+ value: string | boolean
496
+ ): void;
419
497
  /**
420
498
  * 获取value属性值
421
499
  * @param element 目标元素
@@ -423,7 +501,14 @@ class DOMUtils extends DOMUtilsEvent {
423
501
  * // 获取元素textarea的值
424
502
  * DOMUtils.val(document.querySelector("textarea.xx"))
425
503
  * */
426
- val(element: HTMLInputElement | string): string;
504
+ val(
505
+ element:
506
+ | HTMLInputElement
507
+ | HTMLTextAreaElement
508
+ | string
509
+ | (HTMLInputElement | HTMLTextAreaElement)[]
510
+ | NodeListOf<HTMLInputElement | HTMLTextAreaElement>
511
+ ): string;
427
512
  /**
428
513
  * 获取value属性值
429
514
  * @param element 目标元素
@@ -432,32 +517,58 @@ class DOMUtils extends DOMUtilsEvent {
432
517
  * DOMUtils.val(document.querySelector("input.xx"))
433
518
  * DOMUtils.val("input.xx")
434
519
  * */
435
- val(element: HTMLInputElement): boolean | string;
436
- val(element: HTMLInputElement | string, value?: string | boolean) {
520
+ val(
521
+ element:
522
+ | HTMLInputElement
523
+ | HTMLTextAreaElement
524
+ | (HTMLInputElement | HTMLTextAreaElement)[]
525
+ | NodeListOf<HTMLInputElement | HTMLTextAreaElement>
526
+ ): boolean | string;
527
+ val(
528
+ element:
529
+ | HTMLInputElement
530
+ | HTMLTextAreaElement
531
+ | string
532
+ | (HTMLInputElement | HTMLTextAreaElement)[]
533
+ | NodeListOf<HTMLInputElement | HTMLTextAreaElement>,
534
+ value?: string | boolean
535
+ ) {
437
536
  let DOMUtilsContext = this;
438
537
  if (typeof element === "string") {
439
- element = DOMUtilsContext.windowApi.document.querySelector(
440
- element
441
- ) as HTMLInputElement;
538
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
442
539
  }
443
540
  if (element == null) {
444
541
  return;
445
542
  }
543
+ if (isNodeList(element)) {
544
+ if (value == null) {
545
+ // 获取
546
+ return DOMUtilsContext.val(element[0] as HTMLInputElement);
547
+ } else {
548
+ // 设置
549
+ element.forEach(($ele) => {
550
+ DOMUtilsContext.val($ele as HTMLInputElement, value);
551
+ });
552
+ }
553
+ return;
554
+ }
446
555
  if (value == null) {
556
+ // 获取
447
557
  if (
448
558
  element.localName === "input" &&
449
559
  (element.type === "checkbox" || element.type === "radio")
450
560
  ) {
451
- return element.checked;
561
+ return (element as HTMLInputElement).checked;
452
562
  } else {
453
563
  return element.value;
454
564
  }
455
565
  } else {
566
+ // 设置
456
567
  if (
457
568
  element.localName === "input" &&
458
569
  (element.type === "checkbox" || element.type === "radio")
459
570
  ) {
460
- element.checked = !!value;
571
+ (element as HTMLInputElement).checked = !!value;
461
572
  } else {
462
573
  element.value = value as string;
463
574
  }
@@ -475,7 +586,7 @@ class DOMUtils extends DOMUtilsEvent {
475
586
  * DOMUtils.val("a.xx","data-value")
476
587
  * > undefined
477
588
  * */
478
- prop<T extends any>(element: HTMLElement | string, propName: string): T;
589
+ prop<T extends any>(element: DOMUtilsTargetElementType, propName: string): T;
479
590
  /**
480
591
  * 设置元素的属性值
481
592
  * @param element 目标元素
@@ -487,24 +598,34 @@ class DOMUtils extends DOMUtilsEvent {
487
598
  * DOMUtils.val("a.xx","data-value",1)
488
599
  * */
489
600
  prop<T extends any>(
490
- element: HTMLElement | string,
601
+ element: DOMUtilsTargetElementType,
491
602
  propName: string,
492
603
  propValue: T
493
604
  ): void;
494
- prop(element: HTMLElement | string, propName: string, propValue?: any) {
605
+ prop(element: DOMUtilsTargetElementType, propName: string, propValue?: any) {
495
606
  let DOMUtilsContext = this;
607
+ if (typeof element === "string") {
608
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
609
+ }
496
610
  if (element == null) {
497
611
  return;
498
612
  }
499
- if (typeof element === "string") {
500
- element = DOMUtilsContext.windowApi.document.querySelector(
501
- element
502
- ) as HTMLElement;
613
+ if (isNodeList(element)) {
614
+ if (propValue == null) {
615
+ // 获取
616
+ return DOMUtilsContext.prop(element[0] as HTMLElement, propName);
617
+ } else {
618
+ // 设置
619
+ element.forEach(($ele) => {
620
+ DOMUtilsContext.prop($ele as HTMLElement, propName, propValue);
621
+ });
622
+ }
623
+ return;
503
624
  }
504
625
  if (propValue == null) {
505
- return (element as any)[propName];
626
+ return Reflect.get(element, propName);
506
627
  } else {
507
- (element as any)[propName] = propValue;
628
+ Reflect.set(element, propName, propValue);
508
629
  }
509
630
  }
510
631
  /**
@@ -516,16 +637,21 @@ class DOMUtils extends DOMUtilsEvent {
516
637
  * DOMUtils.removeAttr(document.querySelector("a.xx"),"data-value")
517
638
  * DOMUtils.removeAttr("a.xx","data-value")
518
639
  * */
519
- removeAttr(element: HTMLElement | string, attrName: string) {
640
+ removeAttr(element: DOMUtilsTargetElementType, attrName: string) {
520
641
  let DOMUtilsContext = this;
521
642
  if (typeof element === "string") {
522
- element = DOMUtilsContext.windowApi.document.querySelector(
523
- element
524
- ) as HTMLElement;
643
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
525
644
  }
526
645
  if (element == null) {
527
646
  return;
528
647
  }
648
+ if (isNodeList(element)) {
649
+ // 设置
650
+ element.forEach(($ele) => {
651
+ DOMUtilsContext.removeAttr($ele as HTMLElement, attrName);
652
+ });
653
+ return;
654
+ }
529
655
  element.removeAttribute(attrName);
530
656
  }
531
657
  /**
@@ -537,20 +663,35 @@ class DOMUtils extends DOMUtilsEvent {
537
663
  * DOMUtils.removeClass(document.querySelector("a.xx"),"xx")
538
664
  * DOMUtils.removeClass("a.xx","xx")
539
665
  */
540
- removeClass(element: HTMLElement | string, className: string) {
666
+ removeClass(
667
+ element: DOMUtilsTargetElementType,
668
+ className?: string | string[] | undefined | null
669
+ ) {
541
670
  let DOMUtilsContext = this;
542
671
  if (typeof element === "string") {
543
- element = DOMUtilsContext.windowApi.document.querySelector(
544
- element
545
- ) as HTMLElement;
672
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
546
673
  }
547
674
  if (element == null) {
548
675
  return;
549
676
  }
550
- if (className == null) {
677
+ if (isNodeList(element)) {
678
+ // 设置
679
+ element.forEach(($ele) => {
680
+ DOMUtilsContext.removeClass($ele as HTMLElement, className);
681
+ });
551
682
  return;
552
683
  }
553
- element.classList.remove(className);
684
+ if (className == null) {
685
+ // 清空全部className
686
+ element.className = "";
687
+ } else {
688
+ if (!Array.isArray(className)) {
689
+ className = className.split(" ");
690
+ }
691
+ className.forEach((itemClassName) => {
692
+ element.classList.remove(itemClassName);
693
+ });
694
+ }
554
695
  }
555
696
  /**
556
697
  * 移除元素的属性
@@ -561,16 +702,21 @@ class DOMUtils extends DOMUtilsEvent {
561
702
  * DOMUtils.removeProp(document.querySelector("a.xx"),"href")
562
703
  * DOMUtils.removeProp("a.xx","href")
563
704
  * */
564
- removeProp(element: HTMLElement | string, propName: string) {
705
+ removeProp(element: DOMUtilsTargetElementType, propName: string) {
565
706
  let DOMUtilsContext = this;
566
707
  if (typeof element === "string") {
567
- element = DOMUtilsContext.windowApi.document.querySelector(
568
- element
569
- ) as HTMLElement;
708
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
570
709
  }
571
710
  if (element == null) {
572
711
  return;
573
712
  }
713
+ if (isNodeList(element)) {
714
+ // 设置
715
+ element.forEach(($ele) => {
716
+ DOMUtilsContext.removeProp($ele as HTMLElement, propName);
717
+ });
718
+ return;
719
+ }
574
720
  DOMUtilsCommonUtils.delete(element, propName);
575
721
  }
576
722
  /**
@@ -583,28 +729,27 @@ class DOMUtils extends DOMUtilsEvent {
583
729
  * DOMUtils.replaceWith("a.xx",'<b class="xx"></b>')
584
730
  */
585
731
  replaceWith(
586
- element: HTMLElement | string | NodeList | HTMLElement[] | Node,
732
+ element: DOMUtilsTargetElementType,
587
733
  newElement: HTMLElement | string | Node
588
734
  ) {
589
735
  let DOMUtilsContext = this;
590
736
  if (typeof element === "string") {
591
- element = DOMUtilsContext.windowApi.document.querySelector(
592
- element
593
- ) as HTMLElement;
737
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
594
738
  }
595
739
  if (element == null) {
596
740
  return;
597
741
  }
742
+ if (isNodeList(element)) {
743
+ // 设置
744
+ element.forEach(($ele) => {
745
+ DOMUtilsContext.replaceWith($ele as HTMLElement, newElement);
746
+ });
747
+ return;
748
+ }
598
749
  if (typeof newElement === "string") {
599
750
  newElement = DOMUtilsContext.parseHTML(newElement, false, false);
600
751
  }
601
- if (element instanceof NodeList || element instanceof Array) {
602
- element.forEach((item) => {
603
- DOMUtilsContext.replaceWith(item, newElement);
604
- });
605
- } else {
606
- element!.parentElement!.replaceChild(newElement as Node, element);
607
- }
752
+ element!.parentElement!.replaceChild(newElement as Node, element);
608
753
  }
609
754
  /**
610
755
  * 给元素添加class
@@ -615,17 +760,30 @@ class DOMUtils extends DOMUtilsEvent {
615
760
  * DOMUtils.addClass(document.querySelector("a.xx"),"_vue_")
616
761
  * DOMUtils.addClass("a.xx","_vue_")
617
762
  * */
618
- addClass(element: HTMLElement | string, className: string) {
763
+ addClass(element: DOMUtilsTargetElementType, className: string | string[]) {
619
764
  let DOMUtilsContext = this;
620
765
  if (typeof element === "string") {
621
- element = DOMUtilsContext.windowApi.document.querySelector(
622
- element
623
- ) as HTMLElement;
766
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
624
767
  }
625
768
  if (element == null) {
626
769
  return;
627
770
  }
628
- element.classList.add(className);
771
+ if (isNodeList(element)) {
772
+ // 设置
773
+ element.forEach(($ele) => {
774
+ DOMUtilsContext.addClass($ele as HTMLElement, className);
775
+ });
776
+ return;
777
+ }
778
+ if (!Array.isArray(className)) {
779
+ className = className.split(" ");
780
+ }
781
+ className.forEach((itemClassName) => {
782
+ if (itemClassName.trim() == "") {
783
+ return;
784
+ }
785
+ element.classList.add(itemClassName);
786
+ });
629
787
  }
630
788
  /**
631
789
  * 函数在元素内部末尾添加子元素或HTML字符串
@@ -637,7 +795,7 @@ class DOMUtils extends DOMUtilsEvent {
637
795
  * DOMUtils.append("a.xx","'<b class="xx"></b>")
638
796
  * */
639
797
  append(
640
- element: HTMLElement | string,
798
+ element: DOMUtilsTargetElementType,
641
799
  content:
642
800
  | HTMLElement
643
801
  | string
@@ -646,13 +804,19 @@ class DOMUtils extends DOMUtilsEvent {
646
804
  ) {
647
805
  let DOMUtilsContext = this;
648
806
  if (typeof element === "string") {
649
- element = DOMUtilsContext.windowApi.document.querySelector(
650
- element
651
- ) as HTMLElement;
807
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
652
808
  }
653
809
  if (element == null) {
654
810
  return;
655
811
  }
812
+
813
+ if (isNodeList(element)) {
814
+ // 设置
815
+ element.forEach(($ele) => {
816
+ DOMUtilsContext.append($ele as HTMLElement, content);
817
+ });
818
+ return;
819
+ }
656
820
  function elementAppendChild(ele: HTMLElement, text: HTMLElement | string) {
657
821
  if (typeof content === "string") {
658
822
  ele.insertAdjacentHTML("beforeend", text as string);
@@ -666,7 +830,7 @@ class DOMUtils extends DOMUtilsEvent {
666
830
  DOMUtilsContext.windowApi.document.createDocumentFragment();
667
831
  content.forEach((ele) => {
668
832
  if (typeof ele === "string") {
669
- ele = this.parseHTML(ele, true, false);
833
+ ele = DOMUtilsContext.parseHTML(ele, true, false);
670
834
  }
671
835
  fragment.appendChild(ele);
672
836
  });
@@ -684,16 +848,21 @@ class DOMUtils extends DOMUtilsEvent {
684
848
  * DOMUtils.prepend(document.querySelector("a.xx"),document.querySelector("b.xx"))
685
849
  * DOMUtils.prepend("a.xx","'<b class="xx"></b>")
686
850
  * */
687
- prepend(element: HTMLElement | string, content: HTMLElement | string) {
851
+ prepend(element: DOMUtilsTargetElementType, content: HTMLElement | string) {
688
852
  let DOMUtilsContext = this;
689
853
  if (typeof element === "string") {
690
- element = DOMUtilsContext.windowApi.document.querySelector(
691
- element
692
- ) as HTMLElement;
854
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
693
855
  }
694
856
  if (element == null) {
695
857
  return;
696
858
  }
859
+ if (isNodeList(element)) {
860
+ // 设置
861
+ element.forEach(($ele) => {
862
+ DOMUtilsContext.prepend($ele as HTMLElement, content);
863
+ });
864
+ return;
865
+ }
697
866
  if (typeof content === "string") {
698
867
  element.insertAdjacentHTML("afterbegin", content);
699
868
  } else {
@@ -714,16 +883,21 @@ class DOMUtils extends DOMUtilsEvent {
714
883
  * DOMUtils.after(document.querySelector("a.xx"),document.querySelector("b.xx"))
715
884
  * DOMUtils.after("a.xx","'<b class="xx"></b>")
716
885
  * */
717
- after(element: HTMLElement | string, content: HTMLElement | string) {
886
+ after(element: DOMUtilsTargetElementType, content: HTMLElement | string) {
718
887
  let DOMUtilsContext = this;
719
888
  if (typeof element === "string") {
720
- element = DOMUtilsContext.windowApi.document.querySelector(
721
- element
722
- ) as HTMLElement;
889
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
723
890
  }
724
891
  if (element == null) {
725
892
  return;
726
893
  }
894
+ if (isNodeList(element)) {
895
+ // 设置
896
+ element.forEach(($ele) => {
897
+ DOMUtilsContext.after($ele as HTMLElement, content);
898
+ });
899
+ return;
900
+ }
727
901
  if (typeof content === "string") {
728
902
  element.insertAdjacentHTML("afterend", content);
729
903
  } else {
@@ -746,16 +920,21 @@ class DOMUtils extends DOMUtilsEvent {
746
920
  * DOMUtils.before(document.querySelector("a.xx"),document.querySelector("b.xx"))
747
921
  * DOMUtils.before("a.xx","'<b class="xx"></b>")
748
922
  * */
749
- before(element: HTMLElement | string, content: HTMLElement | string) {
923
+ before(element: DOMUtilsTargetElementType, content: HTMLElement | string) {
750
924
  let DOMUtilsContext = this;
751
925
  if (typeof element === "string") {
752
- element = DOMUtilsContext.windowApi.document.querySelector(
753
- element
754
- ) as HTMLElement;
926
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
755
927
  }
756
928
  if (element == null) {
757
929
  return;
758
930
  }
931
+ if (isNodeList(element)) {
932
+ // 设置
933
+ element.forEach(($ele) => {
934
+ DOMUtilsContext.before($ele as HTMLElement, content);
935
+ });
936
+ return;
937
+ }
759
938
  if (typeof content === "string") {
760
939
  element.insertAdjacentHTML("beforebegin", content);
761
940
  } else {
@@ -769,31 +948,28 @@ class DOMUtils extends DOMUtilsEvent {
769
948
  }
770
949
  /**
771
950
  * 移除元素
772
- * @param target 目标元素
951
+ * @param element 目标元素
773
952
  * @example
774
953
  * // 元素a.xx前面添加一个元素
775
954
  * DOMUtils.remove(document.querySelector("a.xx"))
776
955
  * DOMUtils.remove(document.querySelectorAll("a.xx"))
777
956
  * DOMUtils.remove("a.xx")
778
957
  * */
779
- remove(target: HTMLElement | string | NodeList | HTMLElement[]) {
958
+ remove(element: DOMUtilsTargetElementType) {
780
959
  let DOMUtilsContext = this;
781
- if (typeof target === "string") {
782
- target = DOMUtilsContext.windowApi.document.querySelectorAll(
783
- target
784
- ) as NodeListOf<HTMLElement>;
960
+ if (typeof element === "string") {
961
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
785
962
  }
786
- if (target == null) {
963
+ if (element == null) {
787
964
  return;
788
965
  }
789
- if (target instanceof NodeList || target instanceof Array) {
790
- target = target as HTMLElement[];
791
- for (const element of target) {
792
- DOMUtilsContext.remove(element);
793
- }
794
- } else {
795
- target.remove();
966
+ if (isNodeList(element)) {
967
+ element.forEach(($ele) => {
968
+ DOMUtilsContext.remove($ele as HTMLElement);
969
+ });
970
+ return;
796
971
  }
972
+ element.remove();
797
973
  }
798
974
  /**
799
975
  * 移除元素的所有子元素
@@ -803,16 +979,21 @@ class DOMUtils extends DOMUtilsEvent {
803
979
  * DOMUtils.empty(document.querySelector("a.xx"))
804
980
  * DOMUtils.empty("a.xx")
805
981
  * */
806
- empty(element: HTMLElement | string) {
982
+ empty(element: DOMUtilsTargetElementType) {
807
983
  let DOMUtilsContext = this;
808
984
  if (typeof element === "string") {
809
- element = DOMUtilsContext.windowApi.document.querySelector(
810
- element
811
- ) as HTMLElement;
985
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
812
986
  }
813
987
  if (element == null) {
814
988
  return;
815
989
  }
990
+ if (isNodeList(element)) {
991
+ // 设置
992
+ element.forEach(($ele) => {
993
+ DOMUtilsContext.empty($ele as HTMLElement);
994
+ });
995
+ return;
996
+ }
816
997
  element.innerHTML = "";
817
998
  }
818
999
  /**
@@ -834,6 +1015,7 @@ class DOMUtils extends DOMUtilsEvent {
834
1015
  if (element == null) {
835
1016
  return;
836
1017
  }
1018
+
837
1019
  let rect = element.getBoundingClientRect();
838
1020
  return {
839
1021
  /** y轴偏移 */
@@ -845,6 +1027,7 @@ class DOMUtils extends DOMUtilsEvent {
845
1027
  /**
846
1028
  * 获取元素的宽度
847
1029
  * @param element 要获取宽度的元素
1030
+ * @param value 宽度值
848
1031
  * @param isShow 是否已进行isShow,避免爆堆栈
849
1032
  * @returns 元素的宽度,单位为像素
850
1033
  * @example
@@ -861,18 +1044,17 @@ class DOMUtils extends DOMUtilsEvent {
861
1044
  * DOMUtils.width("a.xx",200)
862
1045
  */
863
1046
  width(
864
- element: HTMLElement | string | Window | Document,
1047
+ element: HTMLElement | string | Window | typeof globalThis | Document,
865
1048
  isShow?: boolean
866
1049
  ): number;
867
1050
  width(
868
- element: HTMLElement | string | Window | Document,
1051
+ element: HTMLElement | string | Window | typeof globalThis | Document,
869
1052
  isShow: boolean = false
870
1053
  ) {
871
1054
  let DOMUtilsContext = this;
872
1055
  if (typeof element === "string") {
873
- element = DOMUtilsContext.windowApi.document.querySelector(
874
- element
875
- ) as HTMLElement;
1056
+ element =
1057
+ DOMUtilsContext.windowApi.document.querySelector<HTMLElement>(element)!;
876
1058
  }
877
1059
  if (element == null) {
878
1060
  return;
@@ -966,11 +1148,11 @@ class DOMUtils extends DOMUtilsEvent {
966
1148
  * DOMUtils.height("a.xx",200)
967
1149
  */
968
1150
  height(
969
- element: HTMLElement | string | Window | Document,
1151
+ element: HTMLElement | string | Window | typeof globalThis | Document,
970
1152
  isShow?: boolean
971
1153
  ): number;
972
1154
  height(
973
- element: HTMLElement | string | Window | Document,
1155
+ element: HTMLElement | string | Window | typeof globalThis | Document,
974
1156
  isShow: boolean = false
975
1157
  ) {
976
1158
  let DOMUtilsContext = this;
@@ -1067,11 +1249,11 @@ class DOMUtils extends DOMUtilsEvent {
1067
1249
  * > 400
1068
1250
  */
1069
1251
  outerWidth(
1070
- element: HTMLElement | string | Window | Document,
1252
+ element: HTMLElement | string | Window | typeof globalThis | Document,
1071
1253
  isShow?: boolean
1072
1254
  ): number;
1073
1255
  outerWidth(
1074
- element: HTMLElement | string | Window | Document,
1256
+ element: HTMLElement | string | Window | typeof globalThis | Document,
1075
1257
  isShow: boolean = false
1076
1258
  ) {
1077
1259
  let DOMUtilsContext = this;
@@ -1089,7 +1271,10 @@ class DOMUtils extends DOMUtilsEvent {
1089
1271
  }
1090
1272
  element = element as HTMLElement;
1091
1273
  if (isShow || (!isShow && DOMUtilsCommonUtils.isShow(element))) {
1092
- let style = getComputedStyle(element, null);
1274
+ let style = DOMUtilsContext.windowApi.globalThis.getComputedStyle(
1275
+ element,
1276
+ null
1277
+ );
1093
1278
  let marginLeft = DOMUtilsCommonUtils.getStyleValue(style, "marginLeft");
1094
1279
  let marginRight = DOMUtilsCommonUtils.getStyleValue(style, "marginRight");
1095
1280
  return element.offsetWidth + marginLeft + marginRight;
@@ -1114,9 +1299,12 @@ class DOMUtils extends DOMUtilsEvent {
1114
1299
  * DOMUtils.outerHeight(window)
1115
1300
  * > 700
1116
1301
  */
1117
- outerHeight(element: HTMLElement | string | Window, isShow?: boolean): number;
1118
1302
  outerHeight(
1119
- element: HTMLElement | string | Window,
1303
+ element: HTMLElement | string | Window | typeof globalThis | Document,
1304
+ isShow?: boolean
1305
+ ): number;
1306
+ outerHeight(
1307
+ element: HTMLElement | string | Window | typeof globalThis | Document,
1120
1308
  isShow: boolean = false
1121
1309
  ): number {
1122
1310
  let DOMUtilsContext = this;
@@ -1134,7 +1322,10 @@ class DOMUtils extends DOMUtilsEvent {
1134
1322
  }
1135
1323
  element = element as HTMLElement;
1136
1324
  if (isShow || (!isShow && DOMUtilsCommonUtils.isShow(element))) {
1137
- let style = getComputedStyle(element, null);
1325
+ let style = DOMUtilsContext.windowApi.globalThis.getComputedStyle(
1326
+ element,
1327
+ null
1328
+ );
1138
1329
  let marginTop = DOMUtilsCommonUtils.getStyleValue(style, "marginTop");
1139
1330
  let marginBottom = DOMUtilsCommonUtils.getStyleValue(
1140
1331
  style,
@@ -1161,20 +1352,30 @@ class DOMUtils extends DOMUtilsEvent {
1161
1352
  * })
1162
1353
  */
1163
1354
  animate(
1164
- element: HTMLElement | string,
1355
+ element: DOMUtilsTargetElementType,
1165
1356
  styles: CSSStyleDeclaration,
1166
1357
  duration: number = 1000,
1167
1358
  callback: (() => void) | undefined | null = null
1168
1359
  ) {
1169
1360
  let DOMUtilsContext = this;
1170
1361
  if (typeof element === "string") {
1171
- element = DOMUtilsContext.windowApi.document.querySelector(
1172
- element
1173
- ) as HTMLElement;
1362
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
1174
1363
  }
1175
1364
  if (element == null) {
1176
1365
  return;
1177
1366
  }
1367
+ if (isNodeList(element)) {
1368
+ // 设置
1369
+ element.forEach(($ele) => {
1370
+ DOMUtilsContext.animate(
1371
+ $ele as HTMLElement,
1372
+ styles,
1373
+ duration,
1374
+ callback
1375
+ );
1376
+ });
1377
+ return;
1378
+ }
1178
1379
  if (typeof duration !== "number" || duration <= 0) {
1179
1380
  throw new TypeError("duration must be a positive number");
1180
1381
  }
@@ -1195,7 +1396,9 @@ class DOMUtils extends DOMUtilsEvent {
1195
1396
  [prop: string]: any;
1196
1397
  } = {};
1197
1398
  for (let prop in styles) {
1198
- from[prop] = element.style[prop] || getComputedStyle(element)[prop];
1399
+ from[prop] =
1400
+ element.style[prop] ||
1401
+ DOMUtilsContext.windowApi.globalThis.getComputedStyle(element)[prop];
1199
1402
  to[prop] = styles[prop];
1200
1403
  }
1201
1404
  let timer = setInterval(function () {
@@ -1224,16 +1427,21 @@ class DOMUtils extends DOMUtilsEvent {
1224
1427
  * // 将a.xx元素外面包裹一层div
1225
1428
  * DOMUtils.wrap(document.querySelector("a.xx"),"<div></div>")
1226
1429
  */
1227
- wrap(element: HTMLElement | string | Node, wrapperHTML: string) {
1430
+ wrap(element: DOMUtilsTargetElementType, wrapperHTML: string) {
1228
1431
  let DOMUtilsContext = this;
1229
1432
  if (typeof element === "string") {
1230
- element = DOMUtilsContext.windowApi.document.querySelector(
1231
- element
1232
- ) as HTMLElement;
1433
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
1233
1434
  }
1234
1435
  if (element == null) {
1235
1436
  return;
1236
1437
  }
1438
+ if (isNodeList(element)) {
1439
+ // 设置
1440
+ element.forEach(($ele) => {
1441
+ DOMUtilsContext.wrap($ele as HTMLElement, wrapperHTML);
1442
+ });
1443
+ return;
1444
+ }
1237
1445
  element = element as HTMLElement;
1238
1446
  // 创建一个新的div元素,并将wrapperHTML作为其innerHTML
1239
1447
  let wrapper = DOMUtilsContext.windowApi.document.createElement("div");
@@ -1241,10 +1449,8 @@ class DOMUtils extends DOMUtilsEvent {
1241
1449
 
1242
1450
  let wrapperFirstChild = wrapper.firstChild as HTMLElement;
1243
1451
  // 将要包裹的元素插入目标元素前面
1244
- (element.parentElement as HTMLElement).insertBefore(
1245
- wrapperFirstChild,
1246
- element
1247
- );
1452
+ let parentElement = element.parentElement as HTMLElement;
1453
+ parentElement.insertBefore(wrapperFirstChild, element);
1248
1454
 
1249
1455
  // 将要包裹的元素移动到wrapper中
1250
1456
  wrapperFirstChild.appendChild(element);
@@ -1423,6 +1629,8 @@ class DOMUtils extends DOMUtilsEvent {
1423
1629
  ): ParseHTMLReturnType<T1, T2>;
1424
1630
  parseHTML(html: string, useParser = false, isComplete = false) {
1425
1631
  let DOMUtilsContext = this;
1632
+ // 去除html前后的空格
1633
+ html = html.trim();
1426
1634
  function parseHTMLByDOMParser() {
1427
1635
  let parser = new DOMParser();
1428
1636
  if (isComplete) {
@@ -1446,16 +1654,75 @@ class DOMUtils extends DOMUtilsEvent {
1446
1654
  return parseHTMLByCreateDom();
1447
1655
  }
1448
1656
  }
1657
+ /**
1658
+ * 序列化表单元素
1659
+ * @param $form 表单元素
1660
+ * @example
1661
+ * DOMUtils.serialize(document.querySelector("form"))
1662
+ * > xxx=xxx&aaa=
1663
+ */
1664
+ serialize($form: HTMLFormElement): string {
1665
+ const elements = $form.elements;
1666
+ let serializedArray: { name: string; value: string }[] = [];
1667
+
1668
+ for (let i = 0; i < elements.length; i++) {
1669
+ const element = elements[i] as
1670
+ | HTMLInputElement
1671
+ | HTMLSelectElement
1672
+ | HTMLTextAreaElement;
1673
+
1674
+ if (
1675
+ element.name &&
1676
+ !element.disabled &&
1677
+ ((element as HTMLInputElement).checked ||
1678
+ [
1679
+ "text",
1680
+ "hidden",
1681
+ "password",
1682
+ "textarea",
1683
+ "select-one",
1684
+ "select-multiple",
1685
+ ].includes(element.type))
1686
+ ) {
1687
+ if (element.type === "select-multiple") {
1688
+ for (
1689
+ let j = 0;
1690
+ j < (element as HTMLSelectElement).options.length;
1691
+ j++
1692
+ ) {
1693
+ if ((element as HTMLSelectElement).options[j].selected) {
1694
+ serializedArray.push({
1695
+ name: (element as HTMLSelectElement).name,
1696
+ value: (element as HTMLSelectElement).options[j].value,
1697
+ });
1698
+ }
1699
+ }
1700
+ } else {
1701
+ serializedArray.push({ name: element.name, value: element.value });
1702
+ }
1703
+ }
1704
+ }
1705
+
1706
+ return serializedArray
1707
+ .map(
1708
+ (item) =>
1709
+ `${encodeURIComponent(item.name)}=${encodeURIComponent(item.value)}`
1710
+ )
1711
+ .join("&");
1712
+ }
1449
1713
  /**
1450
1714
  * 显示元素
1451
1715
  * @param target 当前元素
1716
+ * @param checkVisiblie 是否检测元素是否显示
1717
+ * + true (默认)如果检测到还未显示,则强制使用display: unset !important;
1718
+ * + false 不检测,直接设置display属性为空
1452
1719
  * @example
1453
1720
  * // 显示a.xx元素
1454
1721
  * DOMUtils.show(document.querySelector("a.xx"))
1455
1722
  * DOMUtils.show(document.querySelectorAll("a.xx"))
1456
1723
  * DOMUtils.show("a.xx")
1457
1724
  */
1458
- show(target: HTMLElement | string | NodeList | HTMLElement[]) {
1725
+ show(target: DOMUtilsTargetElementType, checkVisiblie: boolean = true) {
1459
1726
  let DOMUtilsContext = this;
1460
1727
  if (target == null) {
1461
1728
  return;
@@ -1466,27 +1733,32 @@ class DOMUtils extends DOMUtilsEvent {
1466
1733
  if (target instanceof NodeList || target instanceof Array) {
1467
1734
  target = target as HTMLElement[];
1468
1735
  for (const element of target) {
1469
- DOMUtilsContext.show(element);
1736
+ DOMUtilsContext.show(element, checkVisiblie);
1470
1737
  }
1471
1738
  } else {
1472
1739
  target = target as HTMLElement;
1473
1740
  target.style.display = "";
1474
- if (!DOMUtilsCommonUtils.isShow(target)) {
1475
- /* 仍然是不显示,尝试使用强覆盖 */
1476
- target.style.setProperty("display", "unset", "important");
1741
+ if (checkVisiblie) {
1742
+ if (!DOMUtilsCommonUtils.isShow(target)) {
1743
+ /* 仍然是不显示,尝试使用强覆盖 */
1744
+ target.style.setProperty("display", "unset", "important");
1745
+ }
1477
1746
  }
1478
1747
  }
1479
1748
  }
1480
1749
  /**
1481
1750
  * 隐藏元素
1482
1751
  * @param target 当前元素
1752
+ * @param checkVisiblie 是否检测元素是否显示
1753
+ * + true (默认)如果检测到显示,则强制使用display: none !important;
1754
+ * + false 不检测,直接设置display属性为none
1483
1755
  * @example
1484
1756
  * // 隐藏a.xx元素
1485
1757
  * DOMUtils.hide(document.querySelector("a.xx"))
1486
1758
  * DOMUtils.hide(document.querySelectorAll("a.xx"))
1487
1759
  * DOMUtils.hide("a.xx")
1488
1760
  */
1489
- hide(target: HTMLElement | string | NodeList | HTMLElement[]) {
1761
+ hide(target: DOMUtilsTargetElementType, checkVisiblie: boolean = true) {
1490
1762
  let DOMUtilsContext = this;
1491
1763
  if (target == null) {
1492
1764
  return;
@@ -1497,14 +1769,16 @@ class DOMUtils extends DOMUtilsEvent {
1497
1769
  if (target instanceof NodeList || target instanceof Array) {
1498
1770
  target = target as HTMLElement[];
1499
1771
  for (const element of target) {
1500
- DOMUtilsContext.hide(element);
1772
+ DOMUtilsContext.hide(element, checkVisiblie);
1501
1773
  }
1502
1774
  } else {
1503
1775
  target = target as HTMLElement;
1504
1776
  target.style.display = "none";
1505
- if (DOMUtilsCommonUtils.isShow(target)) {
1506
- /* 仍然是显示,尝试使用强覆盖 */
1507
- target.style.setProperty("display", "none", "important");
1777
+ if (checkVisiblie) {
1778
+ if (DOMUtilsCommonUtils.isShow(target)) {
1779
+ /* 仍然是显示,尝试使用强覆盖 */
1780
+ target.style.setProperty("display", "none", "important");
1781
+ }
1508
1782
  }
1509
1783
  }
1510
1784
  }
@@ -1523,7 +1797,7 @@ class DOMUtils extends DOMUtilsEvent {
1523
1797
  * })
1524
1798
  */
1525
1799
  fadeIn(
1526
- element: HTMLElement | string,
1800
+ element: DOMUtilsTargetElementType,
1527
1801
  duration: number = 400,
1528
1802
  callback?: () => void
1529
1803
  ) {
@@ -1532,11 +1806,15 @@ class DOMUtils extends DOMUtilsEvent {
1532
1806
  }
1533
1807
  let DOMUtilsContext = this;
1534
1808
  if (typeof element === "string") {
1535
- element = DOMUtilsContext.windowApi.document.querySelector(
1536
- element
1537
- ) as HTMLElement;
1809
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
1810
+ }
1811
+ if (isNodeList(element)) {
1812
+ // 设置
1813
+ element.forEach(($ele) => {
1814
+ DOMUtilsContext.fadeIn($ele as HTMLElement, duration, callback);
1815
+ });
1816
+ return;
1538
1817
  }
1539
- element = element as HTMLElement;
1540
1818
  element.style.opacity = "0";
1541
1819
  element.style.display = "";
1542
1820
  let start: number = null as any;
@@ -1572,7 +1850,7 @@ class DOMUtils extends DOMUtilsEvent {
1572
1850
  * })
1573
1851
  */
1574
1852
  fadeOut(
1575
- element: HTMLElement | string,
1853
+ element: DOMUtilsTargetElementType,
1576
1854
  duration: number = 400,
1577
1855
  callback?: () => void
1578
1856
  ) {
@@ -1581,11 +1859,15 @@ class DOMUtils extends DOMUtilsEvent {
1581
1859
  return;
1582
1860
  }
1583
1861
  if (typeof element === "string") {
1584
- element = DOMUtilsContext.windowApi.document.querySelector(
1585
- element
1586
- ) as HTMLElement;
1862
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
1863
+ }
1864
+ if (isNodeList(element)) {
1865
+ // 设置
1866
+ element.forEach(($ele) => {
1867
+ DOMUtilsContext.fadeOut($ele as HTMLElement, duration, callback);
1868
+ });
1869
+ return;
1587
1870
  }
1588
- element = element as HTMLElement;
1589
1871
  element.style.opacity = "1";
1590
1872
  let start: number = null as any;
1591
1873
  let timer: number = null as any;
@@ -1609,25 +1891,35 @@ class DOMUtils extends DOMUtilsEvent {
1609
1891
  /**
1610
1892
  * 切换元素的显示和隐藏状态
1611
1893
  * @param element 当前元素
1894
+ * @param checkVisiblie 是否检测元素是否显示
1612
1895
  * @example
1613
1896
  * // 如果元素a.xx当前是隐藏,则显示,如果是显示,则隐藏
1614
1897
  * DOMUtils.toggle(document.querySelector("a.xx"))
1615
1898
  * DOMUtils.toggle("a.xx")
1616
1899
  */
1617
- toggle(element: HTMLElement | string) {
1900
+ toggle(element: DOMUtilsTargetElementType, checkVisiblie?: boolean) {
1618
1901
  let DOMUtilsContext = this;
1619
1902
  if (typeof element === "string") {
1620
- element = DOMUtilsContext.windowApi.document.querySelector(
1621
- element
1622
- ) as HTMLElement;
1903
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
1623
1904
  }
1624
1905
  if (element == null) {
1625
1906
  return;
1626
1907
  }
1627
- if (getComputedStyle(element).getPropertyValue("display") === "none") {
1628
- DOMUtilsContext.show(element);
1908
+ if (isNodeList(element)) {
1909
+ // 设置
1910
+ element.forEach(($ele) => {
1911
+ DOMUtilsContext.toggle($ele as HTMLElement);
1912
+ });
1913
+ return;
1914
+ }
1915
+ if (
1916
+ DOMUtilsContext.windowApi.globalThis
1917
+ .getComputedStyle(element)
1918
+ .getPropertyValue("display") === "none"
1919
+ ) {
1920
+ DOMUtilsContext.show(element, checkVisiblie);
1629
1921
  } else {
1630
- DOMUtilsContext.hide(element);
1922
+ DOMUtilsContext.hide(element, checkVisiblie);
1631
1923
  }
1632
1924
  }
1633
1925
  /**