@whitesev/domutils 1.5.6 → 1.5.7
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 +148 -41
- package/dist/index.amd.js.map +1 -1
- package/dist/index.cjs.js +148 -41
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.esm.js +148 -41
- package/dist/index.esm.js.map +1 -1
- package/dist/index.iife.js +148 -41
- package/dist/index.iife.js.map +1 -1
- package/dist/index.system.js +148 -41
- package/dist/index.system.js.map +1 -1
- package/dist/index.umd.js +148 -41
- package/dist/index.umd.js.map +1 -1
- package/dist/types/src/DOMUtils.d.ts +0 -5
- package/dist/types/src/DOMUtilsCommonUtils.d.ts +5 -0
- package/dist/types/src/DOMUtilsEvent.d.ts +9 -0
- package/package.json +1 -1
- package/src/DOMUtils.ts +25 -33
- package/src/DOMUtilsCommonUtils.ts +7 -0
- package/src/DOMUtilsEvent.ts +140 -11
|
@@ -2,11 +2,6 @@ import { DOMUtilsEvent } from "./DOMUtilsEvent";
|
|
|
2
2
|
import type { DOMUtilsCreateElementAttributesMap } from "./types/DOMUtilsEvent";
|
|
3
3
|
import { ParseHTMLReturnType, type DOMUtilsTargetElementType } from "./types/global";
|
|
4
4
|
import type { WindowApiOption } from "./types/WindowApi";
|
|
5
|
-
/**
|
|
6
|
-
* 判断是否是元素列表
|
|
7
|
-
* @param $ele
|
|
8
|
-
*/
|
|
9
|
-
export declare const isNodeList: ($ele: any) => $ele is any[] | NodeList;
|
|
10
5
|
declare class DOMUtils extends DOMUtilsEvent {
|
|
11
6
|
constructor(option?: WindowApiOption);
|
|
12
7
|
/** 版本号 */
|
|
@@ -60,5 +60,10 @@ declare const DOMUtilsCommonUtils: {
|
|
|
60
60
|
* 配合 .setInterval 使用
|
|
61
61
|
*/
|
|
62
62
|
clearInterval(timeId: number | undefined): void;
|
|
63
|
+
/**
|
|
64
|
+
* 判断是否是元素列表
|
|
65
|
+
* @param $ele
|
|
66
|
+
*/
|
|
67
|
+
isNodeList($ele: any): $ele is any[] | NodeList;
|
|
63
68
|
};
|
|
64
69
|
export { DOMUtilsCommonUtils };
|
|
@@ -417,4 +417,13 @@ export declare class DOMUtilsEvent {
|
|
|
417
417
|
*/
|
|
418
418
|
selectorAll<K extends keyof HTMLElementTagNameMap>(selector: K): HTMLElementTagNameMap[K][];
|
|
419
419
|
selectorAll<E extends Element = Element>(selector: string): E[];
|
|
420
|
+
/**
|
|
421
|
+
* 匹配元素,可使用以下的额外语法
|
|
422
|
+
*/
|
|
423
|
+
matches($el: HTMLElement | Element | null | undefined, selector: string): boolean;
|
|
424
|
+
/**
|
|
425
|
+
* 根据选择器获取上层元素,可使用以下的额外语法
|
|
426
|
+
*/
|
|
427
|
+
closest<K extends keyof HTMLElementTagNameMap>($el: HTMLElement | Element, selector: string): HTMLElementTagNameMap[K] | null;
|
|
428
|
+
closest<E extends Element = Element>($el: HTMLElement | Element, selector: string): E | null;
|
|
420
429
|
}
|
package/package.json
CHANGED
package/src/DOMUtils.ts
CHANGED
|
@@ -7,20 +7,12 @@ import {
|
|
|
7
7
|
} from "./types/global";
|
|
8
8
|
import type { WindowApiOption } from "./types/WindowApi";
|
|
9
9
|
|
|
10
|
-
/**
|
|
11
|
-
* 判断是否是元素列表
|
|
12
|
-
* @param $ele
|
|
13
|
-
*/
|
|
14
|
-
export const isNodeList = ($ele: any): $ele is any[] | NodeList => {
|
|
15
|
-
return Array.isArray($ele) || $ele instanceof NodeList;
|
|
16
|
-
};
|
|
17
|
-
|
|
18
10
|
class DOMUtils extends DOMUtilsEvent {
|
|
19
11
|
constructor(option?: WindowApiOption) {
|
|
20
12
|
super(option);
|
|
21
13
|
}
|
|
22
14
|
/** 版本号 */
|
|
23
|
-
version = "2025.5.
|
|
15
|
+
version = "2025.5.30";
|
|
24
16
|
/**
|
|
25
17
|
* 获取元素的属性值
|
|
26
18
|
* @param element 目标元素
|
|
@@ -55,7 +47,7 @@ class DOMUtils extends DOMUtilsEvent {
|
|
|
55
47
|
if (element == null) {
|
|
56
48
|
return;
|
|
57
49
|
}
|
|
58
|
-
if (isNodeList(element)) {
|
|
50
|
+
if (DOMUtilsCommonUtils.isNodeList(element)) {
|
|
59
51
|
if (attrValue == null) {
|
|
60
52
|
// 获取属性
|
|
61
53
|
return DOMUtilsContext.attr(
|
|
@@ -264,7 +256,7 @@ class DOMUtils extends DOMUtilsEvent {
|
|
|
264
256
|
if (element == null) {
|
|
265
257
|
return;
|
|
266
258
|
}
|
|
267
|
-
if (isNodeList(element)) {
|
|
259
|
+
if (DOMUtilsCommonUtils.isNodeList(element)) {
|
|
268
260
|
if (typeof property === "string") {
|
|
269
261
|
if (value == null) {
|
|
270
262
|
// 获取属性
|
|
@@ -356,7 +348,7 @@ class DOMUtils extends DOMUtilsEvent {
|
|
|
356
348
|
if (element == null) {
|
|
357
349
|
return;
|
|
358
350
|
}
|
|
359
|
-
if (isNodeList(element)) {
|
|
351
|
+
if (DOMUtilsCommonUtils.isNodeList(element)) {
|
|
360
352
|
if (text == null) {
|
|
361
353
|
// 获取
|
|
362
354
|
return DOMUtilsContext.text(element[0] as HTMLElement);
|
|
@@ -417,7 +409,7 @@ class DOMUtils extends DOMUtilsEvent {
|
|
|
417
409
|
if (element == null) {
|
|
418
410
|
return;
|
|
419
411
|
}
|
|
420
|
-
if (isNodeList(element)) {
|
|
412
|
+
if (DOMUtilsCommonUtils.isNodeList(element)) {
|
|
421
413
|
if (html == null) {
|
|
422
414
|
// 获取
|
|
423
415
|
return DOMUtilsContext.html(element[0] as HTMLElement);
|
|
@@ -556,7 +548,7 @@ class DOMUtils extends DOMUtilsEvent {
|
|
|
556
548
|
if (element == null) {
|
|
557
549
|
return;
|
|
558
550
|
}
|
|
559
|
-
if (isNodeList(element)) {
|
|
551
|
+
if (DOMUtilsCommonUtils.isNodeList(element)) {
|
|
560
552
|
if (value == null) {
|
|
561
553
|
// 获取
|
|
562
554
|
return DOMUtilsContext.val(element[0] as HTMLInputElement);
|
|
@@ -626,7 +618,7 @@ class DOMUtils extends DOMUtilsEvent {
|
|
|
626
618
|
if (element == null) {
|
|
627
619
|
return;
|
|
628
620
|
}
|
|
629
|
-
if (isNodeList(element)) {
|
|
621
|
+
if (DOMUtilsCommonUtils.isNodeList(element)) {
|
|
630
622
|
if (propValue == null) {
|
|
631
623
|
// 获取
|
|
632
624
|
return DOMUtilsContext.prop(element[0] as HTMLElement, propName);
|
|
@@ -665,7 +657,7 @@ class DOMUtils extends DOMUtilsEvent {
|
|
|
665
657
|
if (element == null) {
|
|
666
658
|
return;
|
|
667
659
|
}
|
|
668
|
-
if (isNodeList(element)) {
|
|
660
|
+
if (DOMUtilsCommonUtils.isNodeList(element)) {
|
|
669
661
|
// 设置
|
|
670
662
|
element.forEach(($ele) => {
|
|
671
663
|
DOMUtilsContext.removeAttr($ele as HTMLElement, attrName);
|
|
@@ -694,7 +686,7 @@ class DOMUtils extends DOMUtilsEvent {
|
|
|
694
686
|
if (element == null) {
|
|
695
687
|
return;
|
|
696
688
|
}
|
|
697
|
-
if (isNodeList(element)) {
|
|
689
|
+
if (DOMUtilsCommonUtils.isNodeList(element)) {
|
|
698
690
|
// 设置
|
|
699
691
|
element.forEach(($ele) => {
|
|
700
692
|
DOMUtilsContext.removeClass($ele as HTMLElement, className);
|
|
@@ -730,7 +722,7 @@ class DOMUtils extends DOMUtilsEvent {
|
|
|
730
722
|
if (element == null) {
|
|
731
723
|
return;
|
|
732
724
|
}
|
|
733
|
-
if (isNodeList(element)) {
|
|
725
|
+
if (DOMUtilsCommonUtils.isNodeList(element)) {
|
|
734
726
|
// 设置
|
|
735
727
|
element.forEach(($ele) => {
|
|
736
728
|
DOMUtilsContext.removeProp($ele as HTMLElement, propName);
|
|
@@ -759,7 +751,7 @@ class DOMUtils extends DOMUtilsEvent {
|
|
|
759
751
|
if (element == null) {
|
|
760
752
|
return;
|
|
761
753
|
}
|
|
762
|
-
if (isNodeList(element)) {
|
|
754
|
+
if (DOMUtilsCommonUtils.isNodeList(element)) {
|
|
763
755
|
// 设置
|
|
764
756
|
element.forEach(($ele) => {
|
|
765
757
|
DOMUtilsContext.replaceWith($ele as HTMLElement, newElement);
|
|
@@ -788,7 +780,7 @@ class DOMUtils extends DOMUtilsEvent {
|
|
|
788
780
|
if (element == null) {
|
|
789
781
|
return;
|
|
790
782
|
}
|
|
791
|
-
if (isNodeList(element)) {
|
|
783
|
+
if (DOMUtilsCommonUtils.isNodeList(element)) {
|
|
792
784
|
// 设置
|
|
793
785
|
element.forEach(($ele) => {
|
|
794
786
|
DOMUtilsContext.addClass($ele as HTMLElement, className);
|
|
@@ -821,7 +813,7 @@ class DOMUtils extends DOMUtilsEvent {
|
|
|
821
813
|
if (element == null) {
|
|
822
814
|
return false;
|
|
823
815
|
}
|
|
824
|
-
if (isNodeList(element)) {
|
|
816
|
+
if (DOMUtilsCommonUtils.isNodeList(element)) {
|
|
825
817
|
let flag = true;
|
|
826
818
|
for (let index = 0; index < element.length; index++) {
|
|
827
819
|
const $ele = element[index] as HTMLElement;
|
|
@@ -868,7 +860,7 @@ class DOMUtils extends DOMUtilsEvent {
|
|
|
868
860
|
return;
|
|
869
861
|
}
|
|
870
862
|
|
|
871
|
-
if (isNodeList(element)) {
|
|
863
|
+
if (DOMUtilsCommonUtils.isNodeList(element)) {
|
|
872
864
|
// 设置
|
|
873
865
|
element.forEach(($ele) => {
|
|
874
866
|
DOMUtilsContext.append($ele as HTMLElement, content);
|
|
@@ -917,7 +909,7 @@ class DOMUtils extends DOMUtilsEvent {
|
|
|
917
909
|
if (element == null) {
|
|
918
910
|
return;
|
|
919
911
|
}
|
|
920
|
-
if (isNodeList(element)) {
|
|
912
|
+
if (DOMUtilsCommonUtils.isNodeList(element)) {
|
|
921
913
|
// 设置
|
|
922
914
|
element.forEach(($ele) => {
|
|
923
915
|
DOMUtilsContext.prepend($ele as HTMLElement, content);
|
|
@@ -955,7 +947,7 @@ class DOMUtils extends DOMUtilsEvent {
|
|
|
955
947
|
if (element == null) {
|
|
956
948
|
return;
|
|
957
949
|
}
|
|
958
|
-
if (isNodeList(element)) {
|
|
950
|
+
if (DOMUtilsCommonUtils.isNodeList(element)) {
|
|
959
951
|
// 设置
|
|
960
952
|
element.forEach(($ele) => {
|
|
961
953
|
DOMUtilsContext.after($ele as HTMLElement, content);
|
|
@@ -995,7 +987,7 @@ class DOMUtils extends DOMUtilsEvent {
|
|
|
995
987
|
if (element == null) {
|
|
996
988
|
return;
|
|
997
989
|
}
|
|
998
|
-
if (isNodeList(element)) {
|
|
990
|
+
if (DOMUtilsCommonUtils.isNodeList(element)) {
|
|
999
991
|
// 设置
|
|
1000
992
|
element.forEach(($ele) => {
|
|
1001
993
|
DOMUtilsContext.before($ele as HTMLElement, content);
|
|
@@ -1033,7 +1025,7 @@ class DOMUtils extends DOMUtilsEvent {
|
|
|
1033
1025
|
if (element == null) {
|
|
1034
1026
|
return;
|
|
1035
1027
|
}
|
|
1036
|
-
if (isNodeList(element)) {
|
|
1028
|
+
if (DOMUtilsCommonUtils.isNodeList(element)) {
|
|
1037
1029
|
element.forEach(($ele) => {
|
|
1038
1030
|
DOMUtilsContext.remove($ele as HTMLElement);
|
|
1039
1031
|
});
|
|
@@ -1057,7 +1049,7 @@ class DOMUtils extends DOMUtilsEvent {
|
|
|
1057
1049
|
if (element == null) {
|
|
1058
1050
|
return;
|
|
1059
1051
|
}
|
|
1060
|
-
if (isNodeList(element)) {
|
|
1052
|
+
if (DOMUtilsCommonUtils.isNodeList(element)) {
|
|
1061
1053
|
// 设置
|
|
1062
1054
|
element.forEach(($ele) => {
|
|
1063
1055
|
DOMUtilsContext.empty($ele as HTMLElement);
|
|
@@ -1425,7 +1417,7 @@ class DOMUtils extends DOMUtilsEvent {
|
|
|
1425
1417
|
if (element == null) {
|
|
1426
1418
|
return;
|
|
1427
1419
|
}
|
|
1428
|
-
if (isNodeList(element)) {
|
|
1420
|
+
if (DOMUtilsCommonUtils.isNodeList(element)) {
|
|
1429
1421
|
// 设置
|
|
1430
1422
|
element.forEach(($ele) => {
|
|
1431
1423
|
DOMUtilsContext.animate(
|
|
@@ -1496,7 +1488,7 @@ class DOMUtils extends DOMUtilsEvent {
|
|
|
1496
1488
|
if (element == null) {
|
|
1497
1489
|
return;
|
|
1498
1490
|
}
|
|
1499
|
-
if (isNodeList(element)) {
|
|
1491
|
+
if (DOMUtilsCommonUtils.isNodeList(element)) {
|
|
1500
1492
|
// 设置
|
|
1501
1493
|
element.forEach(($ele) => {
|
|
1502
1494
|
DOMUtilsContext.wrap($ele as HTMLElement, wrapperHTML);
|
|
@@ -1636,7 +1628,7 @@ class DOMUtils extends DOMUtilsEvent {
|
|
|
1636
1628
|
if (element == null) {
|
|
1637
1629
|
return;
|
|
1638
1630
|
}
|
|
1639
|
-
if (isNodeList(element)) {
|
|
1631
|
+
if (DOMUtilsCommonUtils.isNodeList(element)) {
|
|
1640
1632
|
let resultArray: HTMLElement[] = [];
|
|
1641
1633
|
element.forEach(($ele) => {
|
|
1642
1634
|
resultArray.push(DOMUtilsContext.parent($ele as HTMLElement));
|
|
@@ -1860,7 +1852,7 @@ class DOMUtils extends DOMUtilsEvent {
|
|
|
1860
1852
|
if (typeof element === "string") {
|
|
1861
1853
|
element = DOMUtilsContext.selectorAll(element);
|
|
1862
1854
|
}
|
|
1863
|
-
if (isNodeList(element)) {
|
|
1855
|
+
if (DOMUtilsCommonUtils.isNodeList(element)) {
|
|
1864
1856
|
// 设置
|
|
1865
1857
|
element.forEach(($ele) => {
|
|
1866
1858
|
DOMUtilsContext.fadeIn($ele as HTMLElement, duration, callback);
|
|
@@ -1913,7 +1905,7 @@ class DOMUtils extends DOMUtilsEvent {
|
|
|
1913
1905
|
if (typeof element === "string") {
|
|
1914
1906
|
element = DOMUtilsContext.selectorAll(element);
|
|
1915
1907
|
}
|
|
1916
|
-
if (isNodeList(element)) {
|
|
1908
|
+
if (DOMUtilsCommonUtils.isNodeList(element)) {
|
|
1917
1909
|
// 设置
|
|
1918
1910
|
element.forEach(($ele) => {
|
|
1919
1911
|
DOMUtilsContext.fadeOut($ele as HTMLElement, duration, callback);
|
|
@@ -1957,7 +1949,7 @@ class DOMUtils extends DOMUtilsEvent {
|
|
|
1957
1949
|
if (element == null) {
|
|
1958
1950
|
return;
|
|
1959
1951
|
}
|
|
1960
|
-
if (isNodeList(element)) {
|
|
1952
|
+
if (DOMUtilsCommonUtils.isNodeList(element)) {
|
|
1961
1953
|
// 设置
|
|
1962
1954
|
element.forEach(($ele) => {
|
|
1963
1955
|
DOMUtilsContext.toggle($ele as HTMLElement);
|
|
@@ -184,5 +184,12 @@ const DOMUtilsCommonUtils = {
|
|
|
184
184
|
globalThis.clearInterval(timeId);
|
|
185
185
|
}
|
|
186
186
|
},
|
|
187
|
+
/**
|
|
188
|
+
* 判断是否是元素列表
|
|
189
|
+
* @param $ele
|
|
190
|
+
*/
|
|
191
|
+
isNodeList($ele: any): $ele is any[] | NodeList {
|
|
192
|
+
return Array.isArray($ele) || $ele instanceof NodeList;
|
|
193
|
+
},
|
|
187
194
|
};
|
|
188
195
|
export { DOMUtilsCommonUtils };
|
package/src/DOMUtilsEvent.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { isNodeList } from "./DOMUtils";
|
|
2
1
|
import { DOMUtilsCommonUtils } from "./DOMUtilsCommonUtils";
|
|
3
2
|
import { DOMUtilsData } from "./DOMUtilsData";
|
|
4
3
|
import { OriginPrototype } from "./DOMUtilsOriginPrototype";
|
|
@@ -279,13 +278,15 @@ export class DOMUtilsEvent {
|
|
|
279
278
|
: elementItem;
|
|
280
279
|
let findValue = selectorList.find((selectorItem) => {
|
|
281
280
|
// 判断目标元素是否匹配选择器
|
|
282
|
-
if (
|
|
281
|
+
if (DOMUtilsContext.matches(eventTarget, selectorItem)) {
|
|
283
282
|
/* 当前目标可以被selector所匹配到 */
|
|
284
283
|
return true;
|
|
285
284
|
}
|
|
286
285
|
/* 在上层与主元素之间寻找可以被selector所匹配到的 */
|
|
287
|
-
let $closestMatches =
|
|
288
|
-
eventTarget
|
|
286
|
+
let $closestMatches = DOMUtilsContext.closest<HTMLElement>(
|
|
287
|
+
eventTarget,
|
|
288
|
+
selectorItem
|
|
289
|
+
);
|
|
289
290
|
if ($closestMatches && totalParent?.contains($closestMatches)) {
|
|
290
291
|
eventTarget = $closestMatches;
|
|
291
292
|
return true;
|
|
@@ -910,7 +911,7 @@ export class DOMUtilsEvent {
|
|
|
910
911
|
if (element == null) {
|
|
911
912
|
return;
|
|
912
913
|
}
|
|
913
|
-
if (isNodeList(element)) {
|
|
914
|
+
if (DOMUtilsCommonUtils.isNodeList(element)) {
|
|
914
915
|
// 设置
|
|
915
916
|
element.forEach(($ele) => {
|
|
916
917
|
DOMUtilsContext.click(
|
|
@@ -960,7 +961,7 @@ export class DOMUtilsEvent {
|
|
|
960
961
|
if (element == null) {
|
|
961
962
|
return;
|
|
962
963
|
}
|
|
963
|
-
if (isNodeList(element)) {
|
|
964
|
+
if (DOMUtilsCommonUtils.isNodeList(element)) {
|
|
964
965
|
// 设置
|
|
965
966
|
element.forEach(($ele) => {
|
|
966
967
|
DOMUtilsContext.focus(
|
|
@@ -1015,7 +1016,7 @@ export class DOMUtilsEvent {
|
|
|
1015
1016
|
if (element == null) {
|
|
1016
1017
|
return;
|
|
1017
1018
|
}
|
|
1018
|
-
if (isNodeList(element)) {
|
|
1019
|
+
if (DOMUtilsCommonUtils.isNodeList(element)) {
|
|
1019
1020
|
// 设置
|
|
1020
1021
|
element.forEach(($ele) => {
|
|
1021
1022
|
DOMUtilsContext.focus(
|
|
@@ -1064,7 +1065,7 @@ export class DOMUtilsEvent {
|
|
|
1064
1065
|
if (element == null) {
|
|
1065
1066
|
return;
|
|
1066
1067
|
}
|
|
1067
|
-
if (isNodeList(element)) {
|
|
1068
|
+
if (DOMUtilsCommonUtils.isNodeList(element)) {
|
|
1068
1069
|
// 设置
|
|
1069
1070
|
element.forEach(($ele) => {
|
|
1070
1071
|
DOMUtilsContext.hover($ele as HTMLElement, handler, option);
|
|
@@ -1101,7 +1102,7 @@ export class DOMUtilsEvent {
|
|
|
1101
1102
|
if (typeof element === "string") {
|
|
1102
1103
|
element = DOMUtilsContext.selectorAll(element);
|
|
1103
1104
|
}
|
|
1104
|
-
if (isNodeList(element)) {
|
|
1105
|
+
if (DOMUtilsCommonUtils.isNodeList(element)) {
|
|
1105
1106
|
// 设置
|
|
1106
1107
|
element.forEach(($ele) => {
|
|
1107
1108
|
DOMUtilsContext.keyup($ele as HTMLElement, handler, option);
|
|
@@ -1137,7 +1138,7 @@ export class DOMUtilsEvent {
|
|
|
1137
1138
|
if (typeof element === "string") {
|
|
1138
1139
|
element = DOMUtilsContext.selectorAll(element);
|
|
1139
1140
|
}
|
|
1140
|
-
if (isNodeList(element)) {
|
|
1141
|
+
if (DOMUtilsCommonUtils.isNodeList(element)) {
|
|
1141
1142
|
// 设置
|
|
1142
1143
|
element.forEach(($ele) => {
|
|
1143
1144
|
DOMUtilsContext.keydown($ele as HTMLElement, handler, option);
|
|
@@ -1173,7 +1174,7 @@ export class DOMUtilsEvent {
|
|
|
1173
1174
|
if (typeof element === "string") {
|
|
1174
1175
|
element = DOMUtilsContext.selectorAll(element);
|
|
1175
1176
|
}
|
|
1176
|
-
if (isNodeList(element)) {
|
|
1177
|
+
if (DOMUtilsCommonUtils.isNodeList(element)) {
|
|
1177
1178
|
// 设置
|
|
1178
1179
|
element.forEach(($ele) => {
|
|
1179
1180
|
DOMUtilsContext.keypress($ele as HTMLElement, handler, option);
|
|
@@ -1394,4 +1395,132 @@ export class DOMUtilsEvent {
|
|
|
1394
1395
|
);
|
|
1395
1396
|
}
|
|
1396
1397
|
}
|
|
1398
|
+
/**
|
|
1399
|
+
* 匹配元素,可使用以下的额外语法
|
|
1400
|
+
*/
|
|
1401
|
+
matches(
|
|
1402
|
+
$el: HTMLElement | Element | null | undefined,
|
|
1403
|
+
selector: string
|
|
1404
|
+
): boolean {
|
|
1405
|
+
selector = selector.trim();
|
|
1406
|
+
if ($el == null) {
|
|
1407
|
+
return false;
|
|
1408
|
+
}
|
|
1409
|
+
|
|
1410
|
+
if (selector.match(/[^\s]{1}:empty$/gi)) {
|
|
1411
|
+
// empty 语法
|
|
1412
|
+
selector = selector.replace(/:empty$/gi, "");
|
|
1413
|
+
return $el.matches(selector) && $el?.innerHTML?.trim() === "";
|
|
1414
|
+
} else if (
|
|
1415
|
+
selector.match(/[^\s]{1}:contains\("(.*)"\)$/i) ||
|
|
1416
|
+
selector.match(/[^\s]{1}:contains\('(.*)'\)$/i)
|
|
1417
|
+
) {
|
|
1418
|
+
// contains 语法
|
|
1419
|
+
let textMatch = selector.match(/:contains\(("|')(.*)("|')\)$/i);
|
|
1420
|
+
let text = textMatch![2];
|
|
1421
|
+
selector = selector.replace(/:contains\(("|')(.*)("|')\)$/gi, "");
|
|
1422
|
+
// @ts-ignore
|
|
1423
|
+
let content = $el?.textContent || $el?.innerText;
|
|
1424
|
+
if (typeof content !== "string") {
|
|
1425
|
+
content = "";
|
|
1426
|
+
}
|
|
1427
|
+
return $el.matches(selector) && content?.includes(text);
|
|
1428
|
+
} else if (
|
|
1429
|
+
selector.match(/[^\s]{1}:regexp\("(.*)"\)$/i) ||
|
|
1430
|
+
selector.match(/[^\s]{1}:regexp\('(.*)'\)$/i)
|
|
1431
|
+
) {
|
|
1432
|
+
// regexp 语法
|
|
1433
|
+
let textMatch = selector.match(/:regexp\(("|')(.*)("|')\)$/i);
|
|
1434
|
+
let pattern = textMatch![2];
|
|
1435
|
+
let flagMatch = pattern.match(/("|'),[\s]*("|')([igm]{0,3})$/i);
|
|
1436
|
+
let flags = "";
|
|
1437
|
+
if (flagMatch) {
|
|
1438
|
+
pattern = pattern.replace(/("|'),[\s]*("|')([igm]{0,3})$/gi, "");
|
|
1439
|
+
flags = flagMatch[3];
|
|
1440
|
+
}
|
|
1441
|
+
let regexp = new RegExp(pattern, flags);
|
|
1442
|
+
selector = selector.replace(/:regexp\(("|')(.*)("|')\)$/gi, "");
|
|
1443
|
+
// @ts-ignore
|
|
1444
|
+
let content = $el?.textContent || $el?.innerText;
|
|
1445
|
+
if (typeof content !== "string") {
|
|
1446
|
+
content = "";
|
|
1447
|
+
}
|
|
1448
|
+
return $el.matches(selector) && Boolean(content?.match(regexp));
|
|
1449
|
+
} else {
|
|
1450
|
+
// 普通语法
|
|
1451
|
+
return $el.matches(selector);
|
|
1452
|
+
}
|
|
1453
|
+
}
|
|
1454
|
+
/**
|
|
1455
|
+
* 根据选择器获取上层元素,可使用以下的额外语法
|
|
1456
|
+
*/
|
|
1457
|
+
closest<K extends keyof HTMLElementTagNameMap>(
|
|
1458
|
+
$el: HTMLElement | Element,
|
|
1459
|
+
selector: string
|
|
1460
|
+
): HTMLElementTagNameMap[K] | null;
|
|
1461
|
+
closest<E extends Element = Element>(
|
|
1462
|
+
$el: HTMLElement | Element,
|
|
1463
|
+
selector: string
|
|
1464
|
+
): E | null;
|
|
1465
|
+
closest<E extends Element = Element>(
|
|
1466
|
+
$el: HTMLElement | Element,
|
|
1467
|
+
selector: string
|
|
1468
|
+
): E | null {
|
|
1469
|
+
selector = selector.trim();
|
|
1470
|
+
|
|
1471
|
+
if (selector.match(/[^\s]{1}:empty$/gi)) {
|
|
1472
|
+
// empty 语法
|
|
1473
|
+
selector = selector.replace(/:empty$/gi, "");
|
|
1474
|
+
let $closest = $el?.closest<E>(selector);
|
|
1475
|
+
if ($closest && $closest?.innerHTML?.trim() === "") {
|
|
1476
|
+
return $closest;
|
|
1477
|
+
}
|
|
1478
|
+
return null;
|
|
1479
|
+
} else if (
|
|
1480
|
+
selector.match(/[^\s]{1}:contains\("(.*)"\)$/i) ||
|
|
1481
|
+
selector.match(/[^\s]{1}:contains\('(.*)'\)$/i)
|
|
1482
|
+
) {
|
|
1483
|
+
// contains 语法
|
|
1484
|
+
let textMatch = selector.match(/:contains\(("|')(.*)("|')\)$/i);
|
|
1485
|
+
let text = textMatch![2];
|
|
1486
|
+
selector = selector.replace(/:contains\(("|')(.*)("|')\)$/gi, "");
|
|
1487
|
+
let $closest = $el?.closest<E>(selector);
|
|
1488
|
+
if ($closest) {
|
|
1489
|
+
// @ts-ignore
|
|
1490
|
+
let content = $el?.textContent || $el?.innerText;
|
|
1491
|
+
if (typeof content === "string" && content.includes(text)) {
|
|
1492
|
+
return $closest;
|
|
1493
|
+
}
|
|
1494
|
+
}
|
|
1495
|
+
return null;
|
|
1496
|
+
} else if (
|
|
1497
|
+
selector.match(/[^\s]{1}:regexp\("(.*)"\)$/i) ||
|
|
1498
|
+
selector.match(/[^\s]{1}:regexp\('(.*)'\)$/i)
|
|
1499
|
+
) {
|
|
1500
|
+
// regexp 语法
|
|
1501
|
+
let textMatch = selector.match(/:regexp\(("|')(.*)("|')\)$/i);
|
|
1502
|
+
let pattern = textMatch![2];
|
|
1503
|
+
let flagMatch = pattern.match(/("|'),[\s]*("|')([igm]{0,3})$/i);
|
|
1504
|
+
let flags = "";
|
|
1505
|
+
if (flagMatch) {
|
|
1506
|
+
pattern = pattern.replace(/("|'),[\s]*("|')([igm]{0,3})$/gi, "");
|
|
1507
|
+
flags = flagMatch[3];
|
|
1508
|
+
}
|
|
1509
|
+
let regexp = new RegExp(pattern, flags);
|
|
1510
|
+
selector = selector.replace(/:regexp\(("|')(.*)("|')\)$/gi, "");
|
|
1511
|
+
let $closest = $el?.closest<E>(selector);
|
|
1512
|
+
if ($closest) {
|
|
1513
|
+
// @ts-ignore
|
|
1514
|
+
let content = $el?.textContent || $el?.innerText;
|
|
1515
|
+
if (typeof content === "string" && content.match(regexp)) {
|
|
1516
|
+
return $closest;
|
|
1517
|
+
}
|
|
1518
|
+
}
|
|
1519
|
+
return null;
|
|
1520
|
+
} else {
|
|
1521
|
+
// 普通语法
|
|
1522
|
+
let $closest = $el?.closest<E>(selector);
|
|
1523
|
+
return $closest;
|
|
1524
|
+
}
|
|
1525
|
+
}
|
|
1397
1526
|
}
|