@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/dist/index.amd.js +426 -99
- package/dist/index.amd.js.map +1 -1
- package/dist/index.cjs.js +426 -99
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.esm.js +426 -99
- package/dist/index.esm.js.map +1 -1
- package/dist/index.iife.js +426 -99
- package/dist/index.iife.js.map +1 -1
- package/dist/index.system.js +426 -99
- package/dist/index.system.js.map +1 -1
- package/dist/index.umd.js +426 -99
- package/dist/index.umd.js.map +1 -1
- package/dist/types/src/DOMUtils.d.ts +61 -41
- package/dist/types/src/DOMUtilsEvent.d.ts +14 -13
- package/dist/types/src/types/global.d.ts +6 -0
- package/package.json +1 -1
- package/src/DOMUtils.ts +464 -172
- package/src/DOMUtilsEvent.ts +105 -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.
|
|
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:
|
|
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
|
-
attrValue: string
|
|
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,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:
|
|
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:
|
|
290
|
-
text: string | HTMLElement | Element
|
|
336
|
+
element: DOMUtilsTargetElementType,
|
|
337
|
+
text: string | HTMLElement | Element | number
|
|
291
338
|
): void;
|
|
292
|
-
text(element:
|
|
339
|
+
text(element: DOMUtilsTargetElementType, text?: any) {
|
|
293
340
|
let DOMUtilsContext = this;
|
|
294
341
|
if (typeof element === "string") {
|
|
295
|
-
element = DOMUtilsContext.windowApi.document.
|
|
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:
|
|
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:
|
|
343
|
-
html(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.
|
|
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
|
-
|
|
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 =
|
|
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(
|
|
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(
|
|
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(
|
|
436
|
-
|
|
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.
|
|
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:
|
|
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:
|
|
601
|
+
element: DOMUtilsTargetElementType,
|
|
491
602
|
propName: string,
|
|
492
603
|
propValue: T
|
|
493
604
|
): void;
|
|
494
|
-
prop(element:
|
|
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 (
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
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
|
|
626
|
+
return Reflect.get(element, propName);
|
|
506
627
|
} else {
|
|
507
|
-
(element
|
|
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:
|
|
640
|
+
removeAttr(element: DOMUtilsTargetElementType, attrName: string) {
|
|
520
641
|
let DOMUtilsContext = this;
|
|
521
642
|
if (typeof element === "string") {
|
|
522
|
-
element = DOMUtilsContext.windowApi.document.
|
|
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(
|
|
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.
|
|
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 (
|
|
677
|
+
if (isNodeList(element)) {
|
|
678
|
+
// 设置
|
|
679
|
+
element.forEach(($ele) => {
|
|
680
|
+
DOMUtilsContext.removeClass($ele as HTMLElement, className);
|
|
681
|
+
});
|
|
551
682
|
return;
|
|
552
683
|
}
|
|
553
|
-
|
|
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:
|
|
705
|
+
removeProp(element: DOMUtilsTargetElementType, propName: string) {
|
|
565
706
|
let DOMUtilsContext = this;
|
|
566
707
|
if (typeof element === "string") {
|
|
567
|
-
element = DOMUtilsContext.windowApi.document.
|
|
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:
|
|
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.
|
|
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
|
-
|
|
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:
|
|
763
|
+
addClass(element: DOMUtilsTargetElementType, className: string | string[]) {
|
|
619
764
|
let DOMUtilsContext = this;
|
|
620
765
|
if (typeof element === "string") {
|
|
621
|
-
element = DOMUtilsContext.windowApi.document.
|
|
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
|
|
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:
|
|
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.
|
|
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 =
|
|
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:
|
|
851
|
+
prepend(element: DOMUtilsTargetElementType, content: HTMLElement | string) {
|
|
688
852
|
let DOMUtilsContext = this;
|
|
689
853
|
if (typeof element === "string") {
|
|
690
|
-
element = DOMUtilsContext.windowApi.document.
|
|
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:
|
|
886
|
+
after(element: DOMUtilsTargetElementType, content: HTMLElement | string) {
|
|
718
887
|
let DOMUtilsContext = this;
|
|
719
888
|
if (typeof element === "string") {
|
|
720
|
-
element = DOMUtilsContext.windowApi.document.
|
|
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:
|
|
923
|
+
before(element: DOMUtilsTargetElementType, content: HTMLElement | string) {
|
|
750
924
|
let DOMUtilsContext = this;
|
|
751
925
|
if (typeof element === "string") {
|
|
752
|
-
element = DOMUtilsContext.windowApi.document.
|
|
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
|
|
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(
|
|
958
|
+
remove(element: DOMUtilsTargetElementType) {
|
|
780
959
|
let DOMUtilsContext = this;
|
|
781
|
-
if (typeof
|
|
782
|
-
|
|
783
|
-
target
|
|
784
|
-
) as NodeListOf<HTMLElement>;
|
|
960
|
+
if (typeof element === "string") {
|
|
961
|
+
element = DOMUtilsContext.windowApi.document.querySelectorAll(element);
|
|
785
962
|
}
|
|
786
|
-
if (
|
|
963
|
+
if (element == null) {
|
|
787
964
|
return;
|
|
788
965
|
}
|
|
789
|
-
if (
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
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:
|
|
982
|
+
empty(element: DOMUtilsTargetElementType) {
|
|
807
983
|
let DOMUtilsContext = this;
|
|
808
984
|
if (typeof element === "string") {
|
|
809
|
-
element = DOMUtilsContext.windowApi.document.
|
|
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 =
|
|
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(
|
|
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(
|
|
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:
|
|
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.
|
|
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] =
|
|
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:
|
|
1430
|
+
wrap(element: DOMUtilsTargetElementType, wrapperHTML: string) {
|
|
1228
1431
|
let DOMUtilsContext = this;
|
|
1229
1432
|
if (typeof element === "string") {
|
|
1230
|
-
element = DOMUtilsContext.windowApi.document.
|
|
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
|
-
|
|
1245
|
-
|
|
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:
|
|
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 (
|
|
1475
|
-
|
|
1476
|
-
|
|
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:
|
|
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 (
|
|
1506
|
-
|
|
1507
|
-
|
|
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:
|
|
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.
|
|
1536
|
-
|
|
1537
|
-
|
|
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:
|
|
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.
|
|
1585
|
-
|
|
1586
|
-
|
|
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:
|
|
1900
|
+
toggle(element: DOMUtilsTargetElementType, checkVisiblie?: boolean) {
|
|
1618
1901
|
let DOMUtilsContext = this;
|
|
1619
1902
|
if (typeof element === "string") {
|
|
1620
|
-
element = DOMUtilsContext.windowApi.document.
|
|
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 (
|
|
1628
|
-
|
|
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
|
/**
|