@whitesev/domutils 1.3.4 → 1.3.6

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.10.19";
25
+ version = "2024.10.23";
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
50
  attrValue: string | boolean | number
40
51
  ): void;
41
- attr(element: HTMLElement | string, attrName: string, attrValue?: any) {
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,6 +307,7 @@ 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
  /**
@@ -272,7 +320,7 @@ class DOMUtils extends DOMUtilsEvent {
272
320
  * DOMUtils.text("a.xx","abcd")
273
321
  * DOMUtils.text("a.xx",document.querySelector("b"))
274
322
  * */
275
- text(element: HTMLElement | string): string;
323
+ text(element: DOMUtilsTargetElementType): string;
276
324
  /**
277
325
  * 设置元素的文本内容
278
326
  * @param element 目标元素
@@ -285,19 +333,29 @@ class DOMUtils extends DOMUtilsEvent {
285
333
  * DOMUtils.text("a.xx",document.querySelector("b"))
286
334
  * */
287
335
  text(
288
- element: HTMLElement | string,
336
+ element: DOMUtilsTargetElementType,
289
337
  text: string | HTMLElement | Element | number
290
338
  ): void;
291
- text(element: HTMLElement | string, text?: any) {
339
+ text(element: DOMUtilsTargetElementType, text?: any) {
292
340
  let DOMUtilsContext = this;
293
341
  if (typeof element === "string") {
294
- element = DOMUtilsContext.windowApi.document.querySelector(
295
- element
296
- ) as HTMLElement;
342
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
297
343
  }
298
344
  if (element == null) {
299
345
  return;
300
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
+ }
301
359
  if (text == null) {
302
360
  return element.textContent || element.innerText;
303
361
  } else {
@@ -324,7 +382,7 @@ class DOMUtils extends DOMUtilsEvent {
324
382
  * DOMUtils.html("a.xx",document.querySelector("b"))
325
383
  * */
326
384
  html(
327
- element: HTMLElement | string,
385
+ element: DOMUtilsTargetElementType,
328
386
  html: string | HTMLElement | Element | number
329
387
  ): void;
330
388
  /**
@@ -338,20 +396,32 @@ class DOMUtils extends DOMUtilsEvent {
338
396
  * DOMUtils.html("a.xx","<b>abcd</b>")
339
397
  * DOMUtils.html("a.xx",document.querySelector("b"))
340
398
  * */
341
- html(element: HTMLElement | string): string;
342
- html(element: HTMLElement | string, html?: any) {
399
+ html(element: DOMUtilsTargetElementType): string;
400
+ html(element: DOMUtilsTargetElementType, html?: any) {
343
401
  let DOMUtilsContext = this;
344
402
  if (typeof element === "string") {
345
- element = DOMUtilsContext.windowApi.document.querySelector(
346
- element
347
- ) as HTMLElement;
403
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
348
404
  }
349
405
  if (element == null) {
350
406
  return;
351
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
+ }
352
420
  if (html == null) {
421
+ // 获取
353
422
  return element.innerHTML;
354
423
  } else {
424
+ // 设置
355
425
  if (html instanceof Element) {
356
426
  html = html.innerHTML;
357
427
  }
@@ -380,7 +450,8 @@ class DOMUtils extends DOMUtilsEvent {
380
450
  recovery();
381
451
  return transformInfo;
382
452
  }
383
- let elementTransform = getComputedStyle(element).transform;
453
+ let elementTransform =
454
+ DOMUtilsContext.windowApi.globalThis.getComputedStyle(element).transform;
384
455
  if (
385
456
  elementTransform != null &&
386
457
  elementTransform !== "none" &&
@@ -414,7 +485,15 @@ class DOMUtils extends DOMUtilsEvent {
414
485
  * DOMUtils.val(document.querySelector("input.xx"),true)
415
486
  * DOMUtils.val("input.xx",true)
416
487
  * */
417
- 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;
418
497
  /**
419
498
  * 获取value属性值
420
499
  * @param element 目标元素
@@ -422,7 +501,14 @@ class DOMUtils extends DOMUtilsEvent {
422
501
  * // 获取元素textarea的值
423
502
  * DOMUtils.val(document.querySelector("textarea.xx"))
424
503
  * */
425
- val(element: HTMLInputElement | string): string;
504
+ val(
505
+ element:
506
+ | HTMLInputElement
507
+ | HTMLTextAreaElement
508
+ | string
509
+ | (HTMLInputElement | HTMLTextAreaElement)[]
510
+ | NodeListOf<HTMLInputElement | HTMLTextAreaElement>
511
+ ): string;
426
512
  /**
427
513
  * 获取value属性值
428
514
  * @param element 目标元素
@@ -431,32 +517,58 @@ class DOMUtils extends DOMUtilsEvent {
431
517
  * DOMUtils.val(document.querySelector("input.xx"))
432
518
  * DOMUtils.val("input.xx")
433
519
  * */
434
- val(element: HTMLInputElement): boolean | string;
435
- 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
+ ) {
436
536
  let DOMUtilsContext = this;
437
537
  if (typeof element === "string") {
438
- element = DOMUtilsContext.windowApi.document.querySelector(
439
- element
440
- ) as HTMLInputElement;
538
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
441
539
  }
442
540
  if (element == null) {
443
541
  return;
444
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
+ }
445
555
  if (value == null) {
556
+ // 获取
446
557
  if (
447
558
  element.localName === "input" &&
448
559
  (element.type === "checkbox" || element.type === "radio")
449
560
  ) {
450
- return element.checked;
561
+ return (element as HTMLInputElement).checked;
451
562
  } else {
452
563
  return element.value;
453
564
  }
454
565
  } else {
566
+ // 设置
455
567
  if (
456
568
  element.localName === "input" &&
457
569
  (element.type === "checkbox" || element.type === "radio")
458
570
  ) {
459
- element.checked = !!value;
571
+ (element as HTMLInputElement).checked = !!value;
460
572
  } else {
461
573
  element.value = value as string;
462
574
  }
@@ -474,7 +586,7 @@ class DOMUtils extends DOMUtilsEvent {
474
586
  * DOMUtils.val("a.xx","data-value")
475
587
  * > undefined
476
588
  * */
477
- prop<T extends any>(element: HTMLElement | string, propName: string): T;
589
+ prop<T extends any>(element: DOMUtilsTargetElementType, propName: string): T;
478
590
  /**
479
591
  * 设置元素的属性值
480
592
  * @param element 目标元素
@@ -486,24 +598,34 @@ class DOMUtils extends DOMUtilsEvent {
486
598
  * DOMUtils.val("a.xx","data-value",1)
487
599
  * */
488
600
  prop<T extends any>(
489
- element: HTMLElement | string,
601
+ element: DOMUtilsTargetElementType,
490
602
  propName: string,
491
603
  propValue: T
492
604
  ): void;
493
- prop(element: HTMLElement | string, propName: string, propValue?: any) {
605
+ prop(element: DOMUtilsTargetElementType, propName: string, propValue?: any) {
494
606
  let DOMUtilsContext = this;
607
+ if (typeof element === "string") {
608
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
609
+ }
495
610
  if (element == null) {
496
611
  return;
497
612
  }
498
- if (typeof element === "string") {
499
- element = DOMUtilsContext.windowApi.document.querySelector(
500
- element
501
- ) 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;
502
624
  }
503
625
  if (propValue == null) {
504
- return (element as any)[propName];
626
+ return Reflect.get(element, propName);
505
627
  } else {
506
- (element as any)[propName] = propValue;
628
+ Reflect.set(element, propName, propValue);
507
629
  }
508
630
  }
509
631
  /**
@@ -515,16 +637,21 @@ class DOMUtils extends DOMUtilsEvent {
515
637
  * DOMUtils.removeAttr(document.querySelector("a.xx"),"data-value")
516
638
  * DOMUtils.removeAttr("a.xx","data-value")
517
639
  * */
518
- removeAttr(element: HTMLElement | string, attrName: string) {
640
+ removeAttr(element: DOMUtilsTargetElementType, attrName: string) {
519
641
  let DOMUtilsContext = this;
520
642
  if (typeof element === "string") {
521
- element = DOMUtilsContext.windowApi.document.querySelector(
522
- element
523
- ) as HTMLElement;
643
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
524
644
  }
525
645
  if (element == null) {
526
646
  return;
527
647
  }
648
+ if (isNodeList(element)) {
649
+ // 设置
650
+ element.forEach(($ele) => {
651
+ DOMUtilsContext.removeAttr($ele as HTMLElement, attrName);
652
+ });
653
+ return;
654
+ }
528
655
  element.removeAttribute(attrName);
529
656
  }
530
657
  /**
@@ -536,20 +663,35 @@ class DOMUtils extends DOMUtilsEvent {
536
663
  * DOMUtils.removeClass(document.querySelector("a.xx"),"xx")
537
664
  * DOMUtils.removeClass("a.xx","xx")
538
665
  */
539
- removeClass(element: HTMLElement | string, className: string) {
666
+ removeClass(
667
+ element: DOMUtilsTargetElementType,
668
+ className?: string | string[] | undefined | null
669
+ ) {
540
670
  let DOMUtilsContext = this;
541
671
  if (typeof element === "string") {
542
- element = DOMUtilsContext.windowApi.document.querySelector(
543
- element
544
- ) as HTMLElement;
672
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
545
673
  }
546
674
  if (element == null) {
547
675
  return;
548
676
  }
549
- if (className == null) {
677
+ if (isNodeList(element)) {
678
+ // 设置
679
+ element.forEach(($ele) => {
680
+ DOMUtilsContext.removeClass($ele as HTMLElement, className);
681
+ });
550
682
  return;
551
683
  }
552
- 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
+ }
553
695
  }
554
696
  /**
555
697
  * 移除元素的属性
@@ -560,16 +702,21 @@ class DOMUtils extends DOMUtilsEvent {
560
702
  * DOMUtils.removeProp(document.querySelector("a.xx"),"href")
561
703
  * DOMUtils.removeProp("a.xx","href")
562
704
  * */
563
- removeProp(element: HTMLElement | string, propName: string) {
705
+ removeProp(element: DOMUtilsTargetElementType, propName: string) {
564
706
  let DOMUtilsContext = this;
565
707
  if (typeof element === "string") {
566
- element = DOMUtilsContext.windowApi.document.querySelector(
567
- element
568
- ) as HTMLElement;
708
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
569
709
  }
570
710
  if (element == null) {
571
711
  return;
572
712
  }
713
+ if (isNodeList(element)) {
714
+ // 设置
715
+ element.forEach(($ele) => {
716
+ DOMUtilsContext.removeProp($ele as HTMLElement, propName);
717
+ });
718
+ return;
719
+ }
573
720
  DOMUtilsCommonUtils.delete(element, propName);
574
721
  }
575
722
  /**
@@ -582,28 +729,27 @@ class DOMUtils extends DOMUtilsEvent {
582
729
  * DOMUtils.replaceWith("a.xx",'<b class="xx"></b>')
583
730
  */
584
731
  replaceWith(
585
- element: HTMLElement | string | NodeList | HTMLElement[] | Node,
732
+ element: DOMUtilsTargetElementType,
586
733
  newElement: HTMLElement | string | Node
587
734
  ) {
588
735
  let DOMUtilsContext = this;
589
736
  if (typeof element === "string") {
590
- element = DOMUtilsContext.windowApi.document.querySelector(
591
- element
592
- ) as HTMLElement;
737
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
593
738
  }
594
739
  if (element == null) {
595
740
  return;
596
741
  }
742
+ if (isNodeList(element)) {
743
+ // 设置
744
+ element.forEach(($ele) => {
745
+ DOMUtilsContext.replaceWith($ele as HTMLElement, newElement);
746
+ });
747
+ return;
748
+ }
597
749
  if (typeof newElement === "string") {
598
750
  newElement = DOMUtilsContext.parseHTML(newElement, false, false);
599
751
  }
600
- if (element instanceof NodeList || element instanceof Array) {
601
- element.forEach((item) => {
602
- DOMUtilsContext.replaceWith(item, newElement);
603
- });
604
- } else {
605
- element!.parentElement!.replaceChild(newElement as Node, element);
606
- }
752
+ element!.parentElement!.replaceChild(newElement as Node, element);
607
753
  }
608
754
  /**
609
755
  * 给元素添加class
@@ -614,17 +760,30 @@ class DOMUtils extends DOMUtilsEvent {
614
760
  * DOMUtils.addClass(document.querySelector("a.xx"),"_vue_")
615
761
  * DOMUtils.addClass("a.xx","_vue_")
616
762
  * */
617
- addClass(element: HTMLElement | string, className: string) {
763
+ addClass(element: DOMUtilsTargetElementType, className: string | string[]) {
618
764
  let DOMUtilsContext = this;
619
765
  if (typeof element === "string") {
620
- element = DOMUtilsContext.windowApi.document.querySelector(
621
- element
622
- ) as HTMLElement;
766
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
623
767
  }
624
768
  if (element == null) {
625
769
  return;
626
770
  }
627
- 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
+ });
628
787
  }
629
788
  /**
630
789
  * 函数在元素内部末尾添加子元素或HTML字符串
@@ -636,7 +795,7 @@ class DOMUtils extends DOMUtilsEvent {
636
795
  * DOMUtils.append("a.xx","'<b class="xx"></b>")
637
796
  * */
638
797
  append(
639
- element: HTMLElement | string,
798
+ element: DOMUtilsTargetElementType,
640
799
  content:
641
800
  | HTMLElement
642
801
  | string
@@ -645,13 +804,19 @@ class DOMUtils extends DOMUtilsEvent {
645
804
  ) {
646
805
  let DOMUtilsContext = this;
647
806
  if (typeof element === "string") {
648
- element = DOMUtilsContext.windowApi.document.querySelector(
649
- element
650
- ) as HTMLElement;
807
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
651
808
  }
652
809
  if (element == null) {
653
810
  return;
654
811
  }
812
+
813
+ if (isNodeList(element)) {
814
+ // 设置
815
+ element.forEach(($ele) => {
816
+ DOMUtilsContext.append($ele as HTMLElement, content);
817
+ });
818
+ return;
819
+ }
655
820
  function elementAppendChild(ele: HTMLElement, text: HTMLElement | string) {
656
821
  if (typeof content === "string") {
657
822
  ele.insertAdjacentHTML("beforeend", text as string);
@@ -665,7 +830,7 @@ class DOMUtils extends DOMUtilsEvent {
665
830
  DOMUtilsContext.windowApi.document.createDocumentFragment();
666
831
  content.forEach((ele) => {
667
832
  if (typeof ele === "string") {
668
- ele = this.parseHTML(ele, true, false);
833
+ ele = DOMUtilsContext.parseHTML(ele, true, false);
669
834
  }
670
835
  fragment.appendChild(ele);
671
836
  });
@@ -683,16 +848,21 @@ class DOMUtils extends DOMUtilsEvent {
683
848
  * DOMUtils.prepend(document.querySelector("a.xx"),document.querySelector("b.xx"))
684
849
  * DOMUtils.prepend("a.xx","'<b class="xx"></b>")
685
850
  * */
686
- prepend(element: HTMLElement | string, content: HTMLElement | string) {
851
+ prepend(element: DOMUtilsTargetElementType, content: HTMLElement | string) {
687
852
  let DOMUtilsContext = this;
688
853
  if (typeof element === "string") {
689
- element = DOMUtilsContext.windowApi.document.querySelector(
690
- element
691
- ) as HTMLElement;
854
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
692
855
  }
693
856
  if (element == null) {
694
857
  return;
695
858
  }
859
+ if (isNodeList(element)) {
860
+ // 设置
861
+ element.forEach(($ele) => {
862
+ DOMUtilsContext.prepend($ele as HTMLElement, content);
863
+ });
864
+ return;
865
+ }
696
866
  if (typeof content === "string") {
697
867
  element.insertAdjacentHTML("afterbegin", content);
698
868
  } else {
@@ -713,16 +883,21 @@ class DOMUtils extends DOMUtilsEvent {
713
883
  * DOMUtils.after(document.querySelector("a.xx"),document.querySelector("b.xx"))
714
884
  * DOMUtils.after("a.xx","'<b class="xx"></b>")
715
885
  * */
716
- after(element: HTMLElement | string, content: HTMLElement | string) {
886
+ after(element: DOMUtilsTargetElementType, content: HTMLElement | string) {
717
887
  let DOMUtilsContext = this;
718
888
  if (typeof element === "string") {
719
- element = DOMUtilsContext.windowApi.document.querySelector(
720
- element
721
- ) as HTMLElement;
889
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
722
890
  }
723
891
  if (element == null) {
724
892
  return;
725
893
  }
894
+ if (isNodeList(element)) {
895
+ // 设置
896
+ element.forEach(($ele) => {
897
+ DOMUtilsContext.after($ele as HTMLElement, content);
898
+ });
899
+ return;
900
+ }
726
901
  if (typeof content === "string") {
727
902
  element.insertAdjacentHTML("afterend", content);
728
903
  } else {
@@ -745,16 +920,21 @@ class DOMUtils extends DOMUtilsEvent {
745
920
  * DOMUtils.before(document.querySelector("a.xx"),document.querySelector("b.xx"))
746
921
  * DOMUtils.before("a.xx","'<b class="xx"></b>")
747
922
  * */
748
- before(element: HTMLElement | string, content: HTMLElement | string) {
923
+ before(element: DOMUtilsTargetElementType, content: HTMLElement | string) {
749
924
  let DOMUtilsContext = this;
750
925
  if (typeof element === "string") {
751
- element = DOMUtilsContext.windowApi.document.querySelector(
752
- element
753
- ) as HTMLElement;
926
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
754
927
  }
755
928
  if (element == null) {
756
929
  return;
757
930
  }
931
+ if (isNodeList(element)) {
932
+ // 设置
933
+ element.forEach(($ele) => {
934
+ DOMUtilsContext.before($ele as HTMLElement, content);
935
+ });
936
+ return;
937
+ }
758
938
  if (typeof content === "string") {
759
939
  element.insertAdjacentHTML("beforebegin", content);
760
940
  } else {
@@ -768,31 +948,28 @@ class DOMUtils extends DOMUtilsEvent {
768
948
  }
769
949
  /**
770
950
  * 移除元素
771
- * @param target 目标元素
951
+ * @param element 目标元素
772
952
  * @example
773
953
  * // 元素a.xx前面添加一个元素
774
954
  * DOMUtils.remove(document.querySelector("a.xx"))
775
955
  * DOMUtils.remove(document.querySelectorAll("a.xx"))
776
956
  * DOMUtils.remove("a.xx")
777
957
  * */
778
- remove(target: HTMLElement | string | NodeList | HTMLElement[]) {
958
+ remove(element: DOMUtilsTargetElementType) {
779
959
  let DOMUtilsContext = this;
780
- if (typeof target === "string") {
781
- target = DOMUtilsContext.windowApi.document.querySelectorAll(
782
- target
783
- ) as NodeListOf<HTMLElement>;
960
+ if (typeof element === "string") {
961
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
784
962
  }
785
- if (target == null) {
963
+ if (element == null) {
786
964
  return;
787
965
  }
788
- if (target instanceof NodeList || target instanceof Array) {
789
- target = target as HTMLElement[];
790
- for (const element of target) {
791
- DOMUtilsContext.remove(element);
792
- }
793
- } else {
794
- target.remove();
966
+ if (isNodeList(element)) {
967
+ element.forEach(($ele) => {
968
+ DOMUtilsContext.remove($ele as HTMLElement);
969
+ });
970
+ return;
795
971
  }
972
+ element.remove();
796
973
  }
797
974
  /**
798
975
  * 移除元素的所有子元素
@@ -802,16 +979,21 @@ class DOMUtils extends DOMUtilsEvent {
802
979
  * DOMUtils.empty(document.querySelector("a.xx"))
803
980
  * DOMUtils.empty("a.xx")
804
981
  * */
805
- empty(element: HTMLElement | string) {
982
+ empty(element: DOMUtilsTargetElementType) {
806
983
  let DOMUtilsContext = this;
807
984
  if (typeof element === "string") {
808
- element = DOMUtilsContext.windowApi.document.querySelector(
809
- element
810
- ) as HTMLElement;
985
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
811
986
  }
812
987
  if (element == null) {
813
988
  return;
814
989
  }
990
+ if (isNodeList(element)) {
991
+ // 设置
992
+ element.forEach(($ele) => {
993
+ DOMUtilsContext.empty($ele as HTMLElement);
994
+ });
995
+ return;
996
+ }
815
997
  element.innerHTML = "";
816
998
  }
817
999
  /**
@@ -833,6 +1015,7 @@ class DOMUtils extends DOMUtilsEvent {
833
1015
  if (element == null) {
834
1016
  return;
835
1017
  }
1018
+
836
1019
  let rect = element.getBoundingClientRect();
837
1020
  return {
838
1021
  /** y轴偏移 */
@@ -844,6 +1027,7 @@ class DOMUtils extends DOMUtilsEvent {
844
1027
  /**
845
1028
  * 获取元素的宽度
846
1029
  * @param element 要获取宽度的元素
1030
+ * @param value 宽度值
847
1031
  * @param isShow 是否已进行isShow,避免爆堆栈
848
1032
  * @returns 元素的宽度,单位为像素
849
1033
  * @example
@@ -860,18 +1044,17 @@ class DOMUtils extends DOMUtilsEvent {
860
1044
  * DOMUtils.width("a.xx",200)
861
1045
  */
862
1046
  width(
863
- element: HTMLElement | string | Window | Document,
1047
+ element: HTMLElement | string | Window | typeof globalThis | Document,
864
1048
  isShow?: boolean
865
1049
  ): number;
866
1050
  width(
867
- element: HTMLElement | string | Window | Document,
1051
+ element: HTMLElement | string | Window | typeof globalThis | Document,
868
1052
  isShow: boolean = false
869
1053
  ) {
870
1054
  let DOMUtilsContext = this;
871
1055
  if (typeof element === "string") {
872
- element = DOMUtilsContext.windowApi.document.querySelector(
873
- element
874
- ) as HTMLElement;
1056
+ element =
1057
+ DOMUtilsContext.windowApi.document.querySelector<HTMLElement>(element)!;
875
1058
  }
876
1059
  if (element == null) {
877
1060
  return;
@@ -965,11 +1148,11 @@ class DOMUtils extends DOMUtilsEvent {
965
1148
  * DOMUtils.height("a.xx",200)
966
1149
  */
967
1150
  height(
968
- element: HTMLElement | string | Window | Document,
1151
+ element: HTMLElement | string | Window | typeof globalThis | Document,
969
1152
  isShow?: boolean
970
1153
  ): number;
971
1154
  height(
972
- element: HTMLElement | string | Window | Document,
1155
+ element: HTMLElement | string | Window | typeof globalThis | Document,
973
1156
  isShow: boolean = false
974
1157
  ) {
975
1158
  let DOMUtilsContext = this;
@@ -1066,11 +1249,11 @@ class DOMUtils extends DOMUtilsEvent {
1066
1249
  * > 400
1067
1250
  */
1068
1251
  outerWidth(
1069
- element: HTMLElement | string | Window | Document,
1252
+ element: HTMLElement | string | Window | typeof globalThis | Document,
1070
1253
  isShow?: boolean
1071
1254
  ): number;
1072
1255
  outerWidth(
1073
- element: HTMLElement | string | Window | Document,
1256
+ element: HTMLElement | string | Window | typeof globalThis | Document,
1074
1257
  isShow: boolean = false
1075
1258
  ) {
1076
1259
  let DOMUtilsContext = this;
@@ -1088,7 +1271,10 @@ class DOMUtils extends DOMUtilsEvent {
1088
1271
  }
1089
1272
  element = element as HTMLElement;
1090
1273
  if (isShow || (!isShow && DOMUtilsCommonUtils.isShow(element))) {
1091
- let style = getComputedStyle(element, null);
1274
+ let style = DOMUtilsContext.windowApi.globalThis.getComputedStyle(
1275
+ element,
1276
+ null
1277
+ );
1092
1278
  let marginLeft = DOMUtilsCommonUtils.getStyleValue(style, "marginLeft");
1093
1279
  let marginRight = DOMUtilsCommonUtils.getStyleValue(style, "marginRight");
1094
1280
  return element.offsetWidth + marginLeft + marginRight;
@@ -1113,9 +1299,12 @@ class DOMUtils extends DOMUtilsEvent {
1113
1299
  * DOMUtils.outerHeight(window)
1114
1300
  * > 700
1115
1301
  */
1116
- outerHeight(element: HTMLElement | string | Window, isShow?: boolean): number;
1117
1302
  outerHeight(
1118
- 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,
1119
1308
  isShow: boolean = false
1120
1309
  ): number {
1121
1310
  let DOMUtilsContext = this;
@@ -1133,7 +1322,10 @@ class DOMUtils extends DOMUtilsEvent {
1133
1322
  }
1134
1323
  element = element as HTMLElement;
1135
1324
  if (isShow || (!isShow && DOMUtilsCommonUtils.isShow(element))) {
1136
- let style = getComputedStyle(element, null);
1325
+ let style = DOMUtilsContext.windowApi.globalThis.getComputedStyle(
1326
+ element,
1327
+ null
1328
+ );
1137
1329
  let marginTop = DOMUtilsCommonUtils.getStyleValue(style, "marginTop");
1138
1330
  let marginBottom = DOMUtilsCommonUtils.getStyleValue(
1139
1331
  style,
@@ -1160,20 +1352,30 @@ class DOMUtils extends DOMUtilsEvent {
1160
1352
  * })
1161
1353
  */
1162
1354
  animate(
1163
- element: HTMLElement | string,
1355
+ element: DOMUtilsTargetElementType,
1164
1356
  styles: CSSStyleDeclaration,
1165
1357
  duration: number = 1000,
1166
1358
  callback: (() => void) | undefined | null = null
1167
1359
  ) {
1168
1360
  let DOMUtilsContext = this;
1169
1361
  if (typeof element === "string") {
1170
- element = DOMUtilsContext.windowApi.document.querySelector(
1171
- element
1172
- ) as HTMLElement;
1362
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
1173
1363
  }
1174
1364
  if (element == null) {
1175
1365
  return;
1176
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
+ }
1177
1379
  if (typeof duration !== "number" || duration <= 0) {
1178
1380
  throw new TypeError("duration must be a positive number");
1179
1381
  }
@@ -1194,7 +1396,9 @@ class DOMUtils extends DOMUtilsEvent {
1194
1396
  [prop: string]: any;
1195
1397
  } = {};
1196
1398
  for (let prop in styles) {
1197
- from[prop] = element.style[prop] || getComputedStyle(element)[prop];
1399
+ from[prop] =
1400
+ element.style[prop] ||
1401
+ DOMUtilsContext.windowApi.globalThis.getComputedStyle(element)[prop];
1198
1402
  to[prop] = styles[prop];
1199
1403
  }
1200
1404
  let timer = setInterval(function () {
@@ -1223,16 +1427,21 @@ class DOMUtils extends DOMUtilsEvent {
1223
1427
  * // 将a.xx元素外面包裹一层div
1224
1428
  * DOMUtils.wrap(document.querySelector("a.xx"),"<div></div>")
1225
1429
  */
1226
- wrap(element: HTMLElement | string | Node, wrapperHTML: string) {
1430
+ wrap(element: DOMUtilsTargetElementType, wrapperHTML: string) {
1227
1431
  let DOMUtilsContext = this;
1228
1432
  if (typeof element === "string") {
1229
- element = DOMUtilsContext.windowApi.document.querySelector(
1230
- element
1231
- ) as HTMLElement;
1433
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
1232
1434
  }
1233
1435
  if (element == null) {
1234
1436
  return;
1235
1437
  }
1438
+ if (isNodeList(element)) {
1439
+ // 设置
1440
+ element.forEach(($ele) => {
1441
+ DOMUtilsContext.wrap($ele as HTMLElement, wrapperHTML);
1442
+ });
1443
+ return;
1444
+ }
1236
1445
  element = element as HTMLElement;
1237
1446
  // 创建一个新的div元素,并将wrapperHTML作为其innerHTML
1238
1447
  let wrapper = DOMUtilsContext.windowApi.document.createElement("div");
@@ -1240,10 +1449,8 @@ class DOMUtils extends DOMUtilsEvent {
1240
1449
 
1241
1450
  let wrapperFirstChild = wrapper.firstChild as HTMLElement;
1242
1451
  // 将要包裹的元素插入目标元素前面
1243
- (element.parentElement as HTMLElement).insertBefore(
1244
- wrapperFirstChild,
1245
- element
1246
- );
1452
+ let parentElement = element.parentElement as HTMLElement;
1453
+ parentElement.insertBefore(wrapperFirstChild, element);
1247
1454
 
1248
1455
  // 将要包裹的元素移动到wrapper中
1249
1456
  wrapperFirstChild.appendChild(element);
@@ -1422,6 +1629,8 @@ class DOMUtils extends DOMUtilsEvent {
1422
1629
  ): ParseHTMLReturnType<T1, T2>;
1423
1630
  parseHTML(html: string, useParser = false, isComplete = false) {
1424
1631
  let DOMUtilsContext = this;
1632
+ // 去除html前后的空格
1633
+ html = html.trim();
1425
1634
  function parseHTMLByDOMParser() {
1426
1635
  let parser = new DOMParser();
1427
1636
  if (isComplete) {
@@ -1445,16 +1654,75 @@ class DOMUtils extends DOMUtilsEvent {
1445
1654
  return parseHTMLByCreateDom();
1446
1655
  }
1447
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
+ }
1448
1713
  /**
1449
1714
  * 显示元素
1450
1715
  * @param target 当前元素
1716
+ * @param checkVisiblie 是否检测元素是否显示
1717
+ * + true (默认)如果检测到还未显示,则强制使用display: unset !important;
1718
+ * + false 不检测,直接设置display属性为空
1451
1719
  * @example
1452
1720
  * // 显示a.xx元素
1453
1721
  * DOMUtils.show(document.querySelector("a.xx"))
1454
1722
  * DOMUtils.show(document.querySelectorAll("a.xx"))
1455
1723
  * DOMUtils.show("a.xx")
1456
1724
  */
1457
- show(target: HTMLElement | string | NodeList | HTMLElement[]) {
1725
+ show(target: DOMUtilsTargetElementType, checkVisiblie: boolean = true) {
1458
1726
  let DOMUtilsContext = this;
1459
1727
  if (target == null) {
1460
1728
  return;
@@ -1465,27 +1733,32 @@ class DOMUtils extends DOMUtilsEvent {
1465
1733
  if (target instanceof NodeList || target instanceof Array) {
1466
1734
  target = target as HTMLElement[];
1467
1735
  for (const element of target) {
1468
- DOMUtilsContext.show(element);
1736
+ DOMUtilsContext.show(element, checkVisiblie);
1469
1737
  }
1470
1738
  } else {
1471
1739
  target = target as HTMLElement;
1472
1740
  target.style.display = "";
1473
- if (!DOMUtilsCommonUtils.isShow(target)) {
1474
- /* 仍然是不显示,尝试使用强覆盖 */
1475
- target.style.setProperty("display", "unset", "important");
1741
+ if (checkVisiblie) {
1742
+ if (!DOMUtilsCommonUtils.isShow(target)) {
1743
+ /* 仍然是不显示,尝试使用强覆盖 */
1744
+ target.style.setProperty("display", "unset", "important");
1745
+ }
1476
1746
  }
1477
1747
  }
1478
1748
  }
1479
1749
  /**
1480
1750
  * 隐藏元素
1481
1751
  * @param target 当前元素
1752
+ * @param checkVisiblie 是否检测元素是否显示
1753
+ * + true (默认)如果检测到显示,则强制使用display: none !important;
1754
+ * + false 不检测,直接设置display属性为none
1482
1755
  * @example
1483
1756
  * // 隐藏a.xx元素
1484
1757
  * DOMUtils.hide(document.querySelector("a.xx"))
1485
1758
  * DOMUtils.hide(document.querySelectorAll("a.xx"))
1486
1759
  * DOMUtils.hide("a.xx")
1487
1760
  */
1488
- hide(target: HTMLElement | string | NodeList | HTMLElement[]) {
1761
+ hide(target: DOMUtilsTargetElementType, checkVisiblie: boolean = true) {
1489
1762
  let DOMUtilsContext = this;
1490
1763
  if (target == null) {
1491
1764
  return;
@@ -1496,14 +1769,16 @@ class DOMUtils extends DOMUtilsEvent {
1496
1769
  if (target instanceof NodeList || target instanceof Array) {
1497
1770
  target = target as HTMLElement[];
1498
1771
  for (const element of target) {
1499
- DOMUtilsContext.hide(element);
1772
+ DOMUtilsContext.hide(element, checkVisiblie);
1500
1773
  }
1501
1774
  } else {
1502
1775
  target = target as HTMLElement;
1503
1776
  target.style.display = "none";
1504
- if (DOMUtilsCommonUtils.isShow(target)) {
1505
- /* 仍然是显示,尝试使用强覆盖 */
1506
- target.style.setProperty("display", "none", "important");
1777
+ if (checkVisiblie) {
1778
+ if (DOMUtilsCommonUtils.isShow(target)) {
1779
+ /* 仍然是显示,尝试使用强覆盖 */
1780
+ target.style.setProperty("display", "none", "important");
1781
+ }
1507
1782
  }
1508
1783
  }
1509
1784
  }
@@ -1522,7 +1797,7 @@ class DOMUtils extends DOMUtilsEvent {
1522
1797
  * })
1523
1798
  */
1524
1799
  fadeIn(
1525
- element: HTMLElement | string,
1800
+ element: DOMUtilsTargetElementType,
1526
1801
  duration: number = 400,
1527
1802
  callback?: () => void
1528
1803
  ) {
@@ -1531,11 +1806,15 @@ class DOMUtils extends DOMUtilsEvent {
1531
1806
  }
1532
1807
  let DOMUtilsContext = this;
1533
1808
  if (typeof element === "string") {
1534
- element = DOMUtilsContext.windowApi.document.querySelector(
1535
- element
1536
- ) 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;
1537
1817
  }
1538
- element = element as HTMLElement;
1539
1818
  element.style.opacity = "0";
1540
1819
  element.style.display = "";
1541
1820
  let start: number = null as any;
@@ -1571,7 +1850,7 @@ class DOMUtils extends DOMUtilsEvent {
1571
1850
  * })
1572
1851
  */
1573
1852
  fadeOut(
1574
- element: HTMLElement | string,
1853
+ element: DOMUtilsTargetElementType,
1575
1854
  duration: number = 400,
1576
1855
  callback?: () => void
1577
1856
  ) {
@@ -1580,11 +1859,15 @@ class DOMUtils extends DOMUtilsEvent {
1580
1859
  return;
1581
1860
  }
1582
1861
  if (typeof element === "string") {
1583
- element = DOMUtilsContext.windowApi.document.querySelector(
1584
- element
1585
- ) 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;
1586
1870
  }
1587
- element = element as HTMLElement;
1588
1871
  element.style.opacity = "1";
1589
1872
  let start: number = null as any;
1590
1873
  let timer: number = null as any;
@@ -1608,25 +1891,35 @@ class DOMUtils extends DOMUtilsEvent {
1608
1891
  /**
1609
1892
  * 切换元素的显示和隐藏状态
1610
1893
  * @param element 当前元素
1894
+ * @param checkVisiblie 是否检测元素是否显示
1611
1895
  * @example
1612
1896
  * // 如果元素a.xx当前是隐藏,则显示,如果是显示,则隐藏
1613
1897
  * DOMUtils.toggle(document.querySelector("a.xx"))
1614
1898
  * DOMUtils.toggle("a.xx")
1615
1899
  */
1616
- toggle(element: HTMLElement | string) {
1900
+ toggle(element: DOMUtilsTargetElementType, checkVisiblie?: boolean) {
1617
1901
  let DOMUtilsContext = this;
1618
1902
  if (typeof element === "string") {
1619
- element = DOMUtilsContext.windowApi.document.querySelector(
1620
- element
1621
- ) as HTMLElement;
1903
+ element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
1622
1904
  }
1623
1905
  if (element == null) {
1624
1906
  return;
1625
1907
  }
1626
- if (getComputedStyle(element).getPropertyValue("display") === "none") {
1627
- 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);
1628
1921
  } else {
1629
- DOMUtilsContext.hide(element);
1922
+ DOMUtilsContext.hide(element, checkVisiblie);
1630
1923
  }
1631
1924
  }
1632
1925
  /**