@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/dist/index.amd.js +466 -98
- package/dist/index.amd.js.map +1 -1
- package/dist/index.cjs.js +466 -98
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.esm.js +466 -98
- package/dist/index.esm.js.map +1 -1
- package/dist/index.iife.js +466 -98
- package/dist/index.iife.js.map +1 -1
- package/dist/index.system.js +466 -98
- package/dist/index.system.js.map +1 -1
- package/dist/index.umd.js +466 -98
- package/dist/index.umd.js.map +1 -1
- package/dist/types/src/DOMUtils.d.ts +60 -39
- package/dist/types/src/DOMUtilsEvent.d.ts +52 -13
- package/dist/types/src/types/global.d.ts +6 -0
- package/package.json +1 -1
- package/src/DOMUtils.ts +459 -166
- package/src/DOMUtilsEvent.ts +197 -42
- package/src/types/global.d.ts +6 -0
package/src/DOMUtils.ts
CHANGED
|
@@ -3,15 +3,26 @@ import {
|
|
|
3
3
|
type DOMUtilsCreateElementAttributesMap,
|
|
4
4
|
DOMUtilsEvent,
|
|
5
5
|
} from "./DOMUtilsEvent";
|
|
6
|
-
import {
|
|
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.
|
|
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:
|
|
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:
|
|
48
|
+
element: DOMUtilsTargetElementType,
|
|
38
49
|
attrName: string,
|
|
39
50
|
attrValue: string | boolean | number
|
|
40
51
|
): void;
|
|
41
|
-
attr(element:
|
|
52
|
+
attr(element: DOMUtilsTargetElementType, attrName: string, attrValue?: any) {
|
|
42
53
|
let DOMUtilsContext = this;
|
|
43
54
|
if (typeof element === "string") {
|
|
44
|
-
element = DOMUtilsContext.windowApi.document.
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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.
|
|
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
|
|
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:
|
|
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:
|
|
336
|
+
element: DOMUtilsTargetElementType,
|
|
289
337
|
text: string | HTMLElement | Element | number
|
|
290
338
|
): void;
|
|
291
|
-
text(element:
|
|
339
|
+
text(element: DOMUtilsTargetElementType, text?: any) {
|
|
292
340
|
let DOMUtilsContext = this;
|
|
293
341
|
if (typeof element === "string") {
|
|
294
|
-
element = DOMUtilsContext.windowApi.document.
|
|
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:
|
|
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:
|
|
342
|
-
html(element:
|
|
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.
|
|
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 =
|
|
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(
|
|
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(
|
|
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(
|
|
435
|
-
|
|
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.
|
|
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:
|
|
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:
|
|
601
|
+
element: DOMUtilsTargetElementType,
|
|
490
602
|
propName: string,
|
|
491
603
|
propValue: T
|
|
492
604
|
): void;
|
|
493
|
-
prop(element:
|
|
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 (
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
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
|
|
626
|
+
return Reflect.get(element, propName);
|
|
505
627
|
} else {
|
|
506
|
-
(element
|
|
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:
|
|
640
|
+
removeAttr(element: DOMUtilsTargetElementType, attrName: string) {
|
|
519
641
|
let DOMUtilsContext = this;
|
|
520
642
|
if (typeof element === "string") {
|
|
521
|
-
element = DOMUtilsContext.windowApi.document.
|
|
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(
|
|
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.
|
|
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 (
|
|
677
|
+
if (isNodeList(element)) {
|
|
678
|
+
// 设置
|
|
679
|
+
element.forEach(($ele) => {
|
|
680
|
+
DOMUtilsContext.removeClass($ele as HTMLElement, className);
|
|
681
|
+
});
|
|
550
682
|
return;
|
|
551
683
|
}
|
|
552
|
-
|
|
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:
|
|
705
|
+
removeProp(element: DOMUtilsTargetElementType, propName: string) {
|
|
564
706
|
let DOMUtilsContext = this;
|
|
565
707
|
if (typeof element === "string") {
|
|
566
|
-
element = DOMUtilsContext.windowApi.document.
|
|
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:
|
|
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.
|
|
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
|
-
|
|
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:
|
|
763
|
+
addClass(element: DOMUtilsTargetElementType, className: string | string[]) {
|
|
618
764
|
let DOMUtilsContext = this;
|
|
619
765
|
if (typeof element === "string") {
|
|
620
|
-
element = DOMUtilsContext.windowApi.document.
|
|
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
|
|
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:
|
|
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.
|
|
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 =
|
|
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:
|
|
851
|
+
prepend(element: DOMUtilsTargetElementType, content: HTMLElement | string) {
|
|
687
852
|
let DOMUtilsContext = this;
|
|
688
853
|
if (typeof element === "string") {
|
|
689
|
-
element = DOMUtilsContext.windowApi.document.
|
|
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:
|
|
886
|
+
after(element: DOMUtilsTargetElementType, content: HTMLElement | string) {
|
|
717
887
|
let DOMUtilsContext = this;
|
|
718
888
|
if (typeof element === "string") {
|
|
719
|
-
element = DOMUtilsContext.windowApi.document.
|
|
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:
|
|
923
|
+
before(element: DOMUtilsTargetElementType, content: HTMLElement | string) {
|
|
749
924
|
let DOMUtilsContext = this;
|
|
750
925
|
if (typeof element === "string") {
|
|
751
|
-
element = DOMUtilsContext.windowApi.document.
|
|
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
|
|
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(
|
|
958
|
+
remove(element: DOMUtilsTargetElementType) {
|
|
779
959
|
let DOMUtilsContext = this;
|
|
780
|
-
if (typeof
|
|
781
|
-
|
|
782
|
-
target
|
|
783
|
-
) as NodeListOf<HTMLElement>;
|
|
960
|
+
if (typeof element === "string") {
|
|
961
|
+
element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
|
|
784
962
|
}
|
|
785
|
-
if (
|
|
963
|
+
if (element == null) {
|
|
786
964
|
return;
|
|
787
965
|
}
|
|
788
|
-
if (
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
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:
|
|
982
|
+
empty(element: DOMUtilsTargetElementType) {
|
|
806
983
|
let DOMUtilsContext = this;
|
|
807
984
|
if (typeof element === "string") {
|
|
808
|
-
element = DOMUtilsContext.windowApi.document.
|
|
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 =
|
|
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(
|
|
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(
|
|
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:
|
|
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.
|
|
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] =
|
|
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:
|
|
1430
|
+
wrap(element: DOMUtilsTargetElementType, wrapperHTML: string) {
|
|
1227
1431
|
let DOMUtilsContext = this;
|
|
1228
1432
|
if (typeof element === "string") {
|
|
1229
|
-
element = DOMUtilsContext.windowApi.document.
|
|
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
|
-
|
|
1244
|
-
|
|
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:
|
|
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 (
|
|
1474
|
-
|
|
1475
|
-
|
|
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:
|
|
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 (
|
|
1505
|
-
|
|
1506
|
-
|
|
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:
|
|
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.
|
|
1535
|
-
|
|
1536
|
-
|
|
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:
|
|
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.
|
|
1584
|
-
|
|
1585
|
-
|
|
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:
|
|
1900
|
+
toggle(element: DOMUtilsTargetElementType, checkVisiblie?: boolean) {
|
|
1617
1901
|
let DOMUtilsContext = this;
|
|
1618
1902
|
if (typeof element === "string") {
|
|
1619
|
-
element = DOMUtilsContext.windowApi.document.
|
|
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 (
|
|
1627
|
-
|
|
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
|
/**
|