@whitesev/domutils 1.5.8 → 1.5.10
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 +35 -31
- package/dist/index.amd.js.map +1 -1
- package/dist/index.cjs.js +35 -31
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.esm.js +35 -31
- package/dist/index.esm.js.map +1 -1
- package/dist/index.iife.js +35 -31
- package/dist/index.iife.js.map +1 -1
- package/dist/index.system.js +35 -31
- package/dist/index.system.js.map +1 -1
- package/dist/index.umd.js +35 -31
- package/dist/index.umd.js.map +1 -1
- package/dist/types/src/DOMUtils.d.ts +3 -3
- package/dist/types/src/DOMUtilsEvent.d.ts +24 -22
- package/package.json +2 -1
- package/src/DOMUtils.ts +8 -7
- package/src/DOMUtilsEvent.ts +119 -89
|
@@ -42,7 +42,7 @@ export declare class DOMUtilsEvent {
|
|
|
42
42
|
* console.log("事件触发",event)
|
|
43
43
|
* })
|
|
44
44
|
*/
|
|
45
|
-
on<T extends Event>(element: DOMUtilsElementEventType, eventType: string, callback: (this: HTMLElement, event: T) => void, option?: DOMUtilsEventListenerOption | boolean): void;
|
|
45
|
+
on<T extends Event>(element: DOMUtilsElementEventType, eventType: string | string[], callback: (this: HTMLElement, event: T) => void, option?: DOMUtilsEventListenerOption | boolean): void;
|
|
46
46
|
/**
|
|
47
47
|
* 绑定事件
|
|
48
48
|
* @param element 需要绑定的元素|元素数组|window
|
|
@@ -55,16 +55,16 @@ export declare class DOMUtilsEvent {
|
|
|
55
55
|
* + passive 表示事件监听器是否不会调用preventDefault()。默认为false
|
|
56
56
|
* @example
|
|
57
57
|
* // 监听元素a.xx的click、tap、hover事件
|
|
58
|
-
* DOMUtils.on(document.querySelector("a.xx"),"click tap hover",(event)=>{
|
|
59
|
-
* console.log("事件触发",event)
|
|
58
|
+
* DOMUtils.on(document.querySelector("a.xx"),"click tap hover",(event, selectorTarget)=>{
|
|
59
|
+
* console.log("事件触发", event, selectorTarget)
|
|
60
60
|
* })
|
|
61
|
-
* DOMUtils.on("a.xx",["click","tap","hover"],(event)=>{
|
|
62
|
-
* console.log("事件触发",event)
|
|
61
|
+
* DOMUtils.on("a.xx",["click","tap","hover"],(event, selectorTarget)=>{
|
|
62
|
+
* console.log("事件触发", event, selectorTarget)
|
|
63
63
|
* })
|
|
64
64
|
* @example
|
|
65
65
|
* // 监听全局document下的子元素a.xx的click事件
|
|
66
|
-
* DOMUtils.on(document,"click tap hover","a.xx",(event)=>{
|
|
67
|
-
* console.log("事件触发",event)
|
|
66
|
+
* DOMUtils.on(document,"click tap hover","a.xx",(event, selectorTarget)=>{
|
|
67
|
+
* console.log("事件触发", event, selectorTarget)
|
|
68
68
|
* })
|
|
69
69
|
*/
|
|
70
70
|
on<T extends DOMUtils_EventType>(element: DOMUtilsElementEventType, eventType: T | T[], selector: string | string[] | undefined | null, callback: (this: HTMLElement, event: DOMUtils_Event[T], selectorTarget: HTMLElement) => void, option?: DOMUtilsEventListenerOption | boolean): void;
|
|
@@ -80,19 +80,19 @@ export declare class DOMUtilsEvent {
|
|
|
80
80
|
* + passive 表示事件监听器是否不会调用preventDefault()。默认为false
|
|
81
81
|
* @example
|
|
82
82
|
* // 监听元素a.xx的click、tap、hover事件
|
|
83
|
-
* DOMUtils.on(document.querySelector("a.xx"),"click tap hover",(event)=>{
|
|
84
|
-
* console.log("事件触发",event)
|
|
83
|
+
* DOMUtils.on(document.querySelector("a.xx"),"click tap hover",(event, selectorTarget)=>{
|
|
84
|
+
* console.log("事件触发", event, selectorTarget)
|
|
85
85
|
* })
|
|
86
|
-
* DOMUtils.on("a.xx",["click","tap","hover"],(event)=>{
|
|
87
|
-
* console.log("事件触发",event)
|
|
86
|
+
* DOMUtils.on("a.xx",["click","tap","hover"],(event, selectorTarget)=>{
|
|
87
|
+
* console.log("事件触发", event, selectorTarget)
|
|
88
88
|
* })
|
|
89
89
|
* @example
|
|
90
90
|
* // 监听全局document下的子元素a.xx的click事件
|
|
91
|
-
* DOMUtils.on(document,"click tap hover","a.xx",(event)=>{
|
|
92
|
-
* console.log("事件触发",event)
|
|
91
|
+
* DOMUtils.on(document,"click tap hover","a.xx",(event, selectorTarget)=>{
|
|
92
|
+
* console.log("事件触发", event, selectorTarget)
|
|
93
93
|
* })
|
|
94
94
|
*/
|
|
95
|
-
on<T extends Event>(element: DOMUtilsElementEventType, eventType: string
|
|
95
|
+
on<T extends Event>(element: DOMUtilsElementEventType, eventType: string | string[], selector: string | string[] | undefined | null, callback: (this: HTMLElement, event: T, selectorTarget: HTMLElement) => void, option?: DOMUtilsEventListenerOption | boolean): void;
|
|
96
96
|
/**
|
|
97
97
|
* 取消绑定事件
|
|
98
98
|
* @param element 需要取消绑定的元素|元素数组
|
|
@@ -106,7 +106,7 @@ export declare class DOMUtilsEvent {
|
|
|
106
106
|
* DOMUtils.off(document.querySelector("a.xx"),"click")
|
|
107
107
|
* DOMUtils.off("a.xx","click")
|
|
108
108
|
*/
|
|
109
|
-
off<T extends DOMUtils_EventType>(element: DOMUtilsElementEventType, eventType: T | T[], callback?: (this: HTMLElement, event: DOMUtils_Event[T]
|
|
109
|
+
off<T extends DOMUtils_EventType>(element: DOMUtilsElementEventType, eventType: T | T[], callback?: (this: HTMLElement, event: DOMUtils_Event[T]) => void, option?: EventListenerOptions | boolean, filter?: (value: DOMUtilsEventListenerOptionsAttribute, index: number, array: DOMUtilsEventListenerOptionsAttribute[]) => boolean): void;
|
|
110
110
|
/**
|
|
111
111
|
* 取消绑定事件
|
|
112
112
|
* @param element 需要取消绑定的元素|元素数组
|
|
@@ -120,7 +120,7 @@ export declare class DOMUtilsEvent {
|
|
|
120
120
|
* DOMUtils.off(document.querySelector("a.xx"),"click")
|
|
121
121
|
* DOMUtils.off("a.xx","click")
|
|
122
122
|
*/
|
|
123
|
-
off<T extends Event>(element: DOMUtilsElementEventType, eventType: string, callback?: (this: HTMLElement, event: T
|
|
123
|
+
off<T extends Event>(element: DOMUtilsElementEventType, eventType: string | string[], callback?: (this: HTMLElement, event: T) => void, option?: EventListenerOptions | boolean, filter?: (value: DOMUtilsEventListenerOptionsAttribute, index: number, array: DOMUtilsEventListenerOptionsAttribute[]) => boolean): void;
|
|
124
124
|
/**
|
|
125
125
|
* 取消绑定事件
|
|
126
126
|
* @param element 需要取消绑定的元素|元素数组
|
|
@@ -135,7 +135,7 @@ export declare class DOMUtilsEvent {
|
|
|
135
135
|
* DOMUtils.off(document.querySelector("a.xx"),"click tap hover")
|
|
136
136
|
* DOMUtils.off("a.xx",["click","tap","hover"])
|
|
137
137
|
*/
|
|
138
|
-
off<T extends DOMUtils_EventType>(element: DOMUtilsElementEventType, eventType: T | T[], selector?:
|
|
138
|
+
off<T extends DOMUtils_EventType>(element: DOMUtilsElementEventType, eventType: T | T[], selector?: string | string[] | undefined | null, callback?: (this: HTMLElement, event: DOMUtils_Event[T], selectorTarget: HTMLElement) => void, option?: EventListenerOptions | boolean, filter?: (value: DOMUtilsEventListenerOptionsAttribute, index: number, array: DOMUtilsEventListenerOptionsAttribute[]) => boolean): void;
|
|
139
139
|
/**
|
|
140
140
|
* 取消绑定事件
|
|
141
141
|
* @param element 需要取消绑定的元素|元素数组
|
|
@@ -150,7 +150,7 @@ export declare class DOMUtilsEvent {
|
|
|
150
150
|
* DOMUtils.off(document.querySelector("a.xx"),"click tap hover")
|
|
151
151
|
* DOMUtils.off("a.xx",["click","tap","hover"])
|
|
152
152
|
*/
|
|
153
|
-
off<T extends Event>(element: DOMUtilsElementEventType, eventType: string, selector?:
|
|
153
|
+
off<T extends Event>(element: DOMUtilsElementEventType, eventType: string | string[], selector?: string | string[] | undefined | null, callback?: (this: HTMLElement, event: T, selectorTarget: HTMLElement) => void, option?: EventListenerOptions | boolean, filter?: (value: DOMUtilsEventListenerOptionsAttribute, index: number, array: DOMUtilsEventListenerOptionsAttribute[]) => boolean): void;
|
|
154
154
|
/**
|
|
155
155
|
* 取消绑定所有的事件
|
|
156
156
|
* @param element 需要取消绑定的元素|元素数组
|
|
@@ -383,6 +383,7 @@ export declare class DOMUtilsEvent {
|
|
|
383
383
|
* + :empty 作用:找到既没有文本内容也没有子元素的指定元素
|
|
384
384
|
* + :regexp([text]) 作用: 找到符合正则表达式的内容的指定元素
|
|
385
385
|
* @param selector 选择器
|
|
386
|
+
* @param parent 指定父元素
|
|
386
387
|
* @example
|
|
387
388
|
* DOMUtils.selector("div:contains('测试')")
|
|
388
389
|
* > div.xxx
|
|
@@ -393,8 +394,8 @@ export declare class DOMUtilsEvent {
|
|
|
393
394
|
* DOMUtils.selector("div:regexp('^xxxx$')")
|
|
394
395
|
* > div.xxx
|
|
395
396
|
*/
|
|
396
|
-
selector<K extends keyof HTMLElementTagNameMap>(selector: K): HTMLElementTagNameMap[K] | undefined;
|
|
397
|
-
selector<E extends Element = Element>(selector: string): E | undefined;
|
|
397
|
+
selector<K extends keyof HTMLElementTagNameMap>(selector: K, parent?: Element | Document | DocumentFragment | ShadowRoot): HTMLElementTagNameMap[K] | undefined;
|
|
398
|
+
selector<E extends Element = Element>(selector: string, parent?: Element | Document | DocumentFragment | ShadowRoot): E | undefined;
|
|
398
399
|
/**
|
|
399
400
|
* 选择器,可使用以下的额外语法
|
|
400
401
|
*
|
|
@@ -402,6 +403,7 @@ export declare class DOMUtilsEvent {
|
|
|
402
403
|
* + :empty 作用:找到既没有文本内容也没有子元素的指定元素
|
|
403
404
|
* + :regexp([text]) 作用: 找到符合正则表达式的内容的指定元素
|
|
404
405
|
* @param selector 选择器
|
|
406
|
+
* @param parent 指定父元素
|
|
405
407
|
* @example
|
|
406
408
|
* DOMUtils.selectorAll("div:contains('测试')")
|
|
407
409
|
* > [div.xxx]
|
|
@@ -415,8 +417,8 @@ export declare class DOMUtilsEvent {
|
|
|
415
417
|
* DOMUtils.selectorAll("div:regexp(/^xxx/ig)")
|
|
416
418
|
* > [div.xxx]
|
|
417
419
|
*/
|
|
418
|
-
selectorAll<K extends keyof HTMLElementTagNameMap>(selector: K): HTMLElementTagNameMap[K][];
|
|
419
|
-
selectorAll<E extends Element = Element>(selector: string): E[];
|
|
420
|
+
selectorAll<K extends keyof HTMLElementTagNameMap>(selector: K, parent?: Element | Document | DocumentFragment | ShadowRoot): HTMLElementTagNameMap[K][];
|
|
421
|
+
selectorAll<E extends Element = Element>(selector: string, parent?: Element | Document | DocumentFragment | ShadowRoot): E[];
|
|
420
422
|
/**
|
|
421
423
|
* 匹配元素,可使用以下的额外语法
|
|
422
424
|
*
|
package/package.json
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@whitesev/domutils",
|
|
3
|
-
"version": "1.5.
|
|
3
|
+
"version": "1.5.10",
|
|
4
4
|
"description": "使用js重新对jQuery的部分函数进行了仿写",
|
|
5
|
+
"$schema": "https://json.schemastore.org/package.json",
|
|
5
6
|
"main": "dist/index.cjs.js",
|
|
6
7
|
"module": "dist/index.esm.js",
|
|
7
8
|
"types": "dist/types/index.d.ts",
|
package/src/DOMUtils.ts
CHANGED
|
@@ -12,7 +12,7 @@ class DOMUtils extends DOMUtilsEvent {
|
|
|
12
12
|
super(option);
|
|
13
13
|
}
|
|
14
14
|
/** 版本号 */
|
|
15
|
-
version = "2025.
|
|
15
|
+
version = "2025.6.7";
|
|
16
16
|
/**
|
|
17
17
|
* 获取元素的属性值
|
|
18
18
|
* @param element 目标元素
|
|
@@ -1110,12 +1110,13 @@ class DOMUtils extends DOMUtilsEvent {
|
|
|
1110
1110
|
width(
|
|
1111
1111
|
element: HTMLElement | string | Window | typeof globalThis | Document,
|
|
1112
1112
|
isShow: boolean = false
|
|
1113
|
-
) {
|
|
1113
|
+
): number {
|
|
1114
1114
|
let DOMUtilsContext = this;
|
|
1115
1115
|
if (typeof element === "string") {
|
|
1116
1116
|
element = DOMUtilsContext.selector<HTMLElement>(element)!;
|
|
1117
1117
|
}
|
|
1118
1118
|
if (element == null) {
|
|
1119
|
+
// @ts-ignore
|
|
1119
1120
|
return;
|
|
1120
1121
|
}
|
|
1121
1122
|
if (DOMUtilsCommonUtils.isWin(element)) {
|
|
@@ -1213,7 +1214,7 @@ class DOMUtils extends DOMUtilsEvent {
|
|
|
1213
1214
|
height(
|
|
1214
1215
|
element: HTMLElement | string | Window | typeof globalThis | Document,
|
|
1215
1216
|
isShow: boolean = false
|
|
1216
|
-
) {
|
|
1217
|
+
): number {
|
|
1217
1218
|
let DOMUtilsContext = this;
|
|
1218
1219
|
if (DOMUtilsCommonUtils.isWin(element)) {
|
|
1219
1220
|
return DOMUtilsContext.windowApi.window.document.documentElement
|
|
@@ -1293,9 +1294,9 @@ class DOMUtils extends DOMUtilsEvent {
|
|
|
1293
1294
|
}
|
|
1294
1295
|
/**
|
|
1295
1296
|
* 获取元素的外部宽度(包括边框和外边距)
|
|
1296
|
-
* @param
|
|
1297
|
-
* @param
|
|
1298
|
-
* @returns
|
|
1297
|
+
* @param element 要获取外部宽度的元素
|
|
1298
|
+
* @param [isShow=false] 是否已进行isShow,避免爆堆栈
|
|
1299
|
+
* @returns 元素的外部宽度,单位为像素
|
|
1299
1300
|
* @example
|
|
1300
1301
|
* // 获取元素a.xx的外部宽度
|
|
1301
1302
|
* DOMUtils.outerWidth(document.querySelector("a.xx"))
|
|
@@ -1312,7 +1313,7 @@ class DOMUtils extends DOMUtilsEvent {
|
|
|
1312
1313
|
outerWidth(
|
|
1313
1314
|
element: HTMLElement | string | Window | typeof globalThis | Document,
|
|
1314
1315
|
isShow: boolean = false
|
|
1315
|
-
) {
|
|
1316
|
+
): number {
|
|
1316
1317
|
let DOMUtilsContext = this;
|
|
1317
1318
|
if (DOMUtilsCommonUtils.isWin(element)) {
|
|
1318
1319
|
return DOMUtilsContext.windowApi.window.innerWidth;
|
package/src/DOMUtilsEvent.ts
CHANGED
|
@@ -61,7 +61,7 @@ export class DOMUtilsEvent {
|
|
|
61
61
|
*/
|
|
62
62
|
on<T extends Event>(
|
|
63
63
|
element: DOMUtilsElementEventType,
|
|
64
|
-
eventType: string,
|
|
64
|
+
eventType: string | string[],
|
|
65
65
|
callback: (this: HTMLElement, event: T) => void,
|
|
66
66
|
option?: DOMUtilsEventListenerOption | boolean
|
|
67
67
|
): void;
|
|
@@ -77,16 +77,16 @@ export class DOMUtilsEvent {
|
|
|
77
77
|
* + passive 表示事件监听器是否不会调用preventDefault()。默认为false
|
|
78
78
|
* @example
|
|
79
79
|
* // 监听元素a.xx的click、tap、hover事件
|
|
80
|
-
* DOMUtils.on(document.querySelector("a.xx"),"click tap hover",(event)=>{
|
|
81
|
-
* console.log("事件触发",event)
|
|
80
|
+
* DOMUtils.on(document.querySelector("a.xx"),"click tap hover",(event, selectorTarget)=>{
|
|
81
|
+
* console.log("事件触发", event, selectorTarget)
|
|
82
82
|
* })
|
|
83
|
-
* DOMUtils.on("a.xx",["click","tap","hover"],(event)=>{
|
|
84
|
-
* console.log("事件触发",event)
|
|
83
|
+
* DOMUtils.on("a.xx",["click","tap","hover"],(event, selectorTarget)=>{
|
|
84
|
+
* console.log("事件触发", event, selectorTarget)
|
|
85
85
|
* })
|
|
86
86
|
* @example
|
|
87
87
|
* // 监听全局document下的子元素a.xx的click事件
|
|
88
|
-
* DOMUtils.on(document,"click tap hover","a.xx",(event)=>{
|
|
89
|
-
* console.log("事件触发",event)
|
|
88
|
+
* DOMUtils.on(document,"click tap hover","a.xx",(event, selectorTarget)=>{
|
|
89
|
+
* console.log("事件触发", event, selectorTarget)
|
|
90
90
|
* })
|
|
91
91
|
*/
|
|
92
92
|
on<T extends DOMUtils_EventType>(
|
|
@@ -112,22 +112,22 @@ export class DOMUtilsEvent {
|
|
|
112
112
|
* + passive 表示事件监听器是否不会调用preventDefault()。默认为false
|
|
113
113
|
* @example
|
|
114
114
|
* // 监听元素a.xx的click、tap、hover事件
|
|
115
|
-
* DOMUtils.on(document.querySelector("a.xx"),"click tap hover",(event)=>{
|
|
116
|
-
* console.log("事件触发",event)
|
|
115
|
+
* DOMUtils.on(document.querySelector("a.xx"),"click tap hover",(event, selectorTarget)=>{
|
|
116
|
+
* console.log("事件触发", event, selectorTarget)
|
|
117
117
|
* })
|
|
118
|
-
* DOMUtils.on("a.xx",["click","tap","hover"],(event)=>{
|
|
119
|
-
* console.log("事件触发",event)
|
|
118
|
+
* DOMUtils.on("a.xx",["click","tap","hover"],(event, selectorTarget)=>{
|
|
119
|
+
* console.log("事件触发", event, selectorTarget)
|
|
120
120
|
* })
|
|
121
121
|
* @example
|
|
122
122
|
* // 监听全局document下的子元素a.xx的click事件
|
|
123
|
-
* DOMUtils.on(document,"click tap hover","a.xx",(event)=>{
|
|
124
|
-
* console.log("事件触发",event)
|
|
123
|
+
* DOMUtils.on(document,"click tap hover","a.xx",(event, selectorTarget)=>{
|
|
124
|
+
* console.log("事件触发", event, selectorTarget)
|
|
125
125
|
* })
|
|
126
126
|
*/
|
|
127
127
|
on<T extends Event>(
|
|
128
128
|
element: DOMUtilsElementEventType,
|
|
129
|
-
eventType: string,
|
|
130
|
-
selector: string | string[] |
|
|
129
|
+
eventType: string | string[],
|
|
130
|
+
selector: string | string[] | undefined | null,
|
|
131
131
|
callback: (
|
|
132
132
|
this: HTMLElement,
|
|
133
133
|
event: T,
|
|
@@ -146,11 +146,11 @@ export class DOMUtilsEvent {
|
|
|
146
146
|
| Element
|
|
147
147
|
| null
|
|
148
148
|
| typeof globalThis,
|
|
149
|
-
eventType: DOMUtils_EventType | DOMUtils_EventType[] | string,
|
|
149
|
+
eventType: DOMUtils_EventType | DOMUtils_EventType[] | string | string[],
|
|
150
150
|
selector:
|
|
151
151
|
| string
|
|
152
|
-
| undefined
|
|
153
152
|
| string[]
|
|
153
|
+
| undefined
|
|
154
154
|
| ((this: HTMLElement, event: T, selectorTarget: HTMLElement) => void)
|
|
155
155
|
| null,
|
|
156
156
|
callback?:
|
|
@@ -212,14 +212,26 @@ export class DOMUtilsEvent {
|
|
|
212
212
|
// 事件名
|
|
213
213
|
let eventTypeList: string[] = [];
|
|
214
214
|
if (Array.isArray(eventType)) {
|
|
215
|
-
eventTypeList = eventTypeList.concat(
|
|
215
|
+
eventTypeList = eventTypeList.concat(
|
|
216
|
+
eventType.filter(
|
|
217
|
+
(eventTypeItem) =>
|
|
218
|
+
typeof eventTypeItem === "string" && eventTypeItem.toString() !== ""
|
|
219
|
+
)
|
|
220
|
+
);
|
|
216
221
|
} else if (typeof eventType === "string") {
|
|
217
|
-
eventTypeList = eventTypeList.concat(
|
|
222
|
+
eventTypeList = eventTypeList.concat(
|
|
223
|
+
eventType.split(" ").filter((eventTypeItem) => eventTypeItem !== "")
|
|
224
|
+
);
|
|
218
225
|
}
|
|
219
226
|
// 子元素选择器
|
|
220
227
|
let selectorList: string[] = [];
|
|
221
228
|
if (Array.isArray(selector)) {
|
|
222
|
-
selectorList = selectorList.concat(
|
|
229
|
+
selectorList = selectorList.concat(
|
|
230
|
+
selector.filter(
|
|
231
|
+
(selectorItem) =>
|
|
232
|
+
typeof selectorItem === "string" && selectorItem.toString() !== ""
|
|
233
|
+
)
|
|
234
|
+
);
|
|
223
235
|
} else if (typeof selector === "string") {
|
|
224
236
|
selectorList.push(selector);
|
|
225
237
|
}
|
|
@@ -237,11 +249,12 @@ export class DOMUtilsEvent {
|
|
|
237
249
|
isComposedPath: false,
|
|
238
250
|
};
|
|
239
251
|
if (typeof selector === "function") {
|
|
240
|
-
|
|
252
|
+
// 这是为没有selector的情况
|
|
253
|
+
// 那么它就是callback
|
|
241
254
|
listenerCallBack = selector as any;
|
|
242
255
|
listenerOption = getOption(args, 3, listenerOption);
|
|
243
256
|
} else {
|
|
244
|
-
|
|
257
|
+
// 这是存在selector的情况
|
|
245
258
|
listenerOption = getOption(args, 4, listenerOption);
|
|
246
259
|
}
|
|
247
260
|
/**
|
|
@@ -270,12 +283,15 @@ export class DOMUtilsEvent {
|
|
|
270
283
|
let eventTarget = listenerOption.isComposedPath
|
|
271
284
|
? (event.composedPath()[0] as HTMLElement)
|
|
272
285
|
: (event.target as HTMLElement);
|
|
273
|
-
let totalParent =
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
286
|
+
let totalParent = elementItem;
|
|
287
|
+
if (DOMUtilsCommonUtils.isWin(totalParent)) {
|
|
288
|
+
if (
|
|
289
|
+
totalParent ===
|
|
290
|
+
(DOMUtilsContext.windowApi.document as any as HTMLElement)
|
|
291
|
+
) {
|
|
292
|
+
totalParent = DOMUtilsContext.windowApi.document.documentElement;
|
|
293
|
+
}
|
|
294
|
+
}
|
|
279
295
|
let findValue = selectorList.find((selectorItem) => {
|
|
280
296
|
// 判断目标元素是否匹配选择器
|
|
281
297
|
if (DOMUtilsContext.matches(eventTarget, selectorItem)) {
|
|
@@ -322,8 +338,7 @@ export class DOMUtilsEvent {
|
|
|
322
338
|
/* 获取对象上的事件 */
|
|
323
339
|
let elementEvents: {
|
|
324
340
|
[k: string]: DOMUtilsEventListenerOptionsAttribute[];
|
|
325
|
-
|
|
326
|
-
} = elementItem[DOMUtilsData.SymbolEvents] || {};
|
|
341
|
+
} = Reflect.get(elementItem, DOMUtilsData.SymbolEvents) || {};
|
|
327
342
|
/* 初始化对象上的xx事件 */
|
|
328
343
|
elementEvents[eventName] = elementEvents[eventName] || [];
|
|
329
344
|
elementEvents[eventName].push({
|
|
@@ -333,8 +348,7 @@ export class DOMUtilsEvent {
|
|
|
333
348
|
originCallBack: listenerCallBack,
|
|
334
349
|
});
|
|
335
350
|
/* 覆盖事件 */
|
|
336
|
-
|
|
337
|
-
elementItem[DOMUtilsData.SymbolEvents] = elementEvents;
|
|
351
|
+
Reflect.set(elementItem, DOMUtilsData.SymbolEvents, elementEvents);
|
|
338
352
|
});
|
|
339
353
|
});
|
|
340
354
|
}
|
|
@@ -354,12 +368,8 @@ export class DOMUtilsEvent {
|
|
|
354
368
|
off<T extends DOMUtils_EventType>(
|
|
355
369
|
element: DOMUtilsElementEventType,
|
|
356
370
|
eventType: T | T[],
|
|
357
|
-
callback?: (
|
|
358
|
-
|
|
359
|
-
event: DOMUtils_Event[T],
|
|
360
|
-
selectorTarget: HTMLElement
|
|
361
|
-
) => void,
|
|
362
|
-
option?: boolean | EventListenerOptions,
|
|
371
|
+
callback?: (this: HTMLElement, event: DOMUtils_Event[T]) => void,
|
|
372
|
+
option?: EventListenerOptions | boolean,
|
|
363
373
|
filter?: (
|
|
364
374
|
value: DOMUtilsEventListenerOptionsAttribute,
|
|
365
375
|
index: number,
|
|
@@ -381,13 +391,9 @@ export class DOMUtilsEvent {
|
|
|
381
391
|
*/
|
|
382
392
|
off<T extends Event>(
|
|
383
393
|
element: DOMUtilsElementEventType,
|
|
384
|
-
eventType: string,
|
|
385
|
-
callback?: (
|
|
386
|
-
|
|
387
|
-
event: T,
|
|
388
|
-
selectorTarget: HTMLElement
|
|
389
|
-
) => void,
|
|
390
|
-
option?: boolean | EventListenerOptions,
|
|
394
|
+
eventType: string | string[],
|
|
395
|
+
callback?: (this: HTMLElement, event: T) => void,
|
|
396
|
+
option?: EventListenerOptions | boolean,
|
|
391
397
|
filter?: (
|
|
392
398
|
value: DOMUtilsEventListenerOptionsAttribute,
|
|
393
399
|
index: number,
|
|
@@ -411,13 +417,13 @@ export class DOMUtilsEvent {
|
|
|
411
417
|
off<T extends DOMUtils_EventType>(
|
|
412
418
|
element: DOMUtilsElementEventType,
|
|
413
419
|
eventType: T | T[],
|
|
414
|
-
selector?:
|
|
420
|
+
selector?: string | string[] | undefined | null,
|
|
415
421
|
callback?: (
|
|
416
422
|
this: HTMLElement,
|
|
417
423
|
event: DOMUtils_Event[T],
|
|
418
424
|
selectorTarget: HTMLElement
|
|
419
425
|
) => void,
|
|
420
|
-
option?:
|
|
426
|
+
option?: EventListenerOptions | boolean,
|
|
421
427
|
filter?: (
|
|
422
428
|
value: DOMUtilsEventListenerOptionsAttribute,
|
|
423
429
|
index: number,
|
|
@@ -440,14 +446,14 @@ export class DOMUtilsEvent {
|
|
|
440
446
|
*/
|
|
441
447
|
off<T extends Event>(
|
|
442
448
|
element: DOMUtilsElementEventType,
|
|
443
|
-
eventType: string,
|
|
444
|
-
selector?:
|
|
449
|
+
eventType: string | string[],
|
|
450
|
+
selector?: string | string[] | undefined | null,
|
|
445
451
|
callback?: (
|
|
446
452
|
this: HTMLElement,
|
|
447
453
|
event: T,
|
|
448
454
|
selectorTarget: HTMLElement
|
|
449
455
|
) => void,
|
|
450
|
-
option?:
|
|
456
|
+
option?: EventListenerOptions | boolean,
|
|
451
457
|
filter?: (
|
|
452
458
|
value: DOMUtilsEventListenerOptionsAttribute,
|
|
453
459
|
index: number,
|
|
@@ -465,18 +471,20 @@ export class DOMUtilsEvent {
|
|
|
465
471
|
| Element
|
|
466
472
|
| null
|
|
467
473
|
| typeof globalThis,
|
|
468
|
-
eventType: DOMUtils_EventType | DOMUtils_EventType[] | string,
|
|
469
|
-
selector
|
|
470
|
-
|
|
|
474
|
+
eventType: DOMUtils_EventType | DOMUtils_EventType[] | string | string[],
|
|
475
|
+
selector:
|
|
476
|
+
| string
|
|
477
|
+
| string[]
|
|
471
478
|
| undefined
|
|
472
|
-
| ((this: HTMLElement, event: T, selectorTarget: HTMLElement) => void)
|
|
479
|
+
| ((this: HTMLElement, event: T, selectorTarget: HTMLElement) => void)
|
|
480
|
+
| null,
|
|
473
481
|
callback?:
|
|
474
482
|
| ((this: HTMLElement, event: T, selectorTarget: HTMLElement) => void)
|
|
475
|
-
|
|
|
476
|
-
|
|
|
483
|
+
| EventListenerOptions
|
|
484
|
+
| boolean,
|
|
477
485
|
option?:
|
|
478
|
-
| boolean
|
|
479
486
|
| EventListenerOptions
|
|
487
|
+
| boolean
|
|
480
488
|
| ((
|
|
481
489
|
value: DOMUtilsEventListenerOptionsAttribute,
|
|
482
490
|
index: number,
|
|
@@ -499,7 +507,7 @@ export class DOMUtilsEvent {
|
|
|
499
507
|
startIndex: number,
|
|
500
508
|
option: EventListenerOptions
|
|
501
509
|
) {
|
|
502
|
-
let currentParam:
|
|
510
|
+
let currentParam: EventListenerOptions | boolean = args1[startIndex];
|
|
503
511
|
if (typeof currentParam === "boolean") {
|
|
504
512
|
option.capture = currentParam;
|
|
505
513
|
} else if (
|
|
@@ -527,14 +535,26 @@ export class DOMUtilsEvent {
|
|
|
527
535
|
}
|
|
528
536
|
let eventTypeList: string[] = [];
|
|
529
537
|
if (Array.isArray(eventType)) {
|
|
530
|
-
eventTypeList = eventTypeList.concat(
|
|
538
|
+
eventTypeList = eventTypeList.concat(
|
|
539
|
+
eventType.filter(
|
|
540
|
+
(eventTypeItem) =>
|
|
541
|
+
typeof eventTypeItem === "string" && eventTypeItem.toString() !== ""
|
|
542
|
+
)
|
|
543
|
+
);
|
|
531
544
|
} else if (typeof eventType === "string") {
|
|
532
|
-
eventTypeList = eventTypeList.concat(
|
|
545
|
+
eventTypeList = eventTypeList.concat(
|
|
546
|
+
eventType.split(" ").filter((eventTypeItem) => eventTypeItem !== "")
|
|
547
|
+
);
|
|
533
548
|
}
|
|
534
549
|
// 子元素选择器
|
|
535
550
|
let selectorList: string[] = [];
|
|
536
551
|
if (Array.isArray(selector)) {
|
|
537
|
-
selectorList = selectorList.concat(
|
|
552
|
+
selectorList = selectorList.concat(
|
|
553
|
+
selector.filter(
|
|
554
|
+
(selectorItem) =>
|
|
555
|
+
typeof selectorItem === "string" && selectorItem.toString() !== ""
|
|
556
|
+
)
|
|
557
|
+
);
|
|
538
558
|
} else if (typeof selector === "string") {
|
|
539
559
|
selectorList.push(selector);
|
|
540
560
|
}
|
|
@@ -554,10 +574,12 @@ export class DOMUtilsEvent {
|
|
|
554
574
|
capture: false,
|
|
555
575
|
};
|
|
556
576
|
if (typeof selector === "function") {
|
|
557
|
-
|
|
577
|
+
// 这是为没有selector的情况
|
|
578
|
+
// 那么它就是callback
|
|
558
579
|
listenerCallBack = selector;
|
|
559
580
|
listenerOption = getOption(args, 3, listenerOption);
|
|
560
581
|
} else {
|
|
582
|
+
// 这是存在selector的情况
|
|
561
583
|
listenerOption = getOption(args, 4, listenerOption);
|
|
562
584
|
}
|
|
563
585
|
// 是否移除所有事件
|
|
@@ -574,11 +596,11 @@ export class DOMUtilsEvent {
|
|
|
574
596
|
}
|
|
575
597
|
elementList.forEach((elementItem) => {
|
|
576
598
|
/* 获取对象上的事件 */
|
|
577
|
-
|
|
578
|
-
|
|
599
|
+
let elementEvents: {
|
|
600
|
+
[key: string]: DOMUtilsEventListenerOptionsAttribute[];
|
|
601
|
+
} = Reflect.get(elementItem, DOMUtilsData.SymbolEvents) || {};
|
|
579
602
|
eventTypeList.forEach((eventName) => {
|
|
580
|
-
let handlers
|
|
581
|
-
elementEvents[eventName] || [];
|
|
603
|
+
let handlers = elementEvents[eventName] || [];
|
|
582
604
|
if (typeof filter === "function") {
|
|
583
605
|
handlers = handlers.filter(filter);
|
|
584
606
|
}
|
|
@@ -619,8 +641,7 @@ export class DOMUtilsEvent {
|
|
|
619
641
|
DOMUtilsCommonUtils.delete(elementEvents, eventType);
|
|
620
642
|
}
|
|
621
643
|
});
|
|
622
|
-
|
|
623
|
-
elementItem[DOMUtilsData.SymbolEvents] = elementEvents;
|
|
644
|
+
Reflect.set(elementItem, DOMUtilsData.SymbolEvents, elementEvents);
|
|
624
645
|
});
|
|
625
646
|
}
|
|
626
647
|
/**
|
|
@@ -687,8 +708,8 @@ export class DOMUtilsEvent {
|
|
|
687
708
|
capture: handler["option"]["capture"],
|
|
688
709
|
});
|
|
689
710
|
}
|
|
690
|
-
|
|
691
|
-
DOMUtilsCommonUtils.delete(
|
|
711
|
+
let events = Reflect.get(elementItem, symbolEvents);
|
|
712
|
+
DOMUtilsCommonUtils.delete(events, eventName);
|
|
692
713
|
});
|
|
693
714
|
});
|
|
694
715
|
});
|
|
@@ -1301,6 +1322,7 @@ export class DOMUtilsEvent {
|
|
|
1301
1322
|
* + :empty 作用:找到既没有文本内容也没有子元素的指定元素
|
|
1302
1323
|
* + :regexp([text]) 作用: 找到符合正则表达式的内容的指定元素
|
|
1303
1324
|
* @param selector 选择器
|
|
1325
|
+
* @param parent 指定父元素
|
|
1304
1326
|
* @example
|
|
1305
1327
|
* DOMUtils.selector("div:contains('测试')")
|
|
1306
1328
|
* > div.xxx
|
|
@@ -1312,11 +1334,18 @@ export class DOMUtilsEvent {
|
|
|
1312
1334
|
* > div.xxx
|
|
1313
1335
|
*/
|
|
1314
1336
|
selector<K extends keyof HTMLElementTagNameMap>(
|
|
1315
|
-
selector: K
|
|
1337
|
+
selector: K,
|
|
1338
|
+
parent?: Element | Document | DocumentFragment | ShadowRoot
|
|
1316
1339
|
): HTMLElementTagNameMap[K] | undefined;
|
|
1317
|
-
selector<E extends Element = Element>(
|
|
1318
|
-
|
|
1319
|
-
|
|
1340
|
+
selector<E extends Element = Element>(
|
|
1341
|
+
selector: string,
|
|
1342
|
+
parent?: Element | Document | DocumentFragment | ShadowRoot
|
|
1343
|
+
): E | undefined;
|
|
1344
|
+
selector<E extends Element = Element>(
|
|
1345
|
+
selector: string,
|
|
1346
|
+
parent?: Element | Document | DocumentFragment | ShadowRoot
|
|
1347
|
+
) {
|
|
1348
|
+
return this.selectorAll<E>(selector, parent)[0];
|
|
1320
1349
|
}
|
|
1321
1350
|
/**
|
|
1322
1351
|
* 选择器,可使用以下的额外语法
|
|
@@ -1325,6 +1354,7 @@ export class DOMUtilsEvent {
|
|
|
1325
1354
|
* + :empty 作用:找到既没有文本内容也没有子元素的指定元素
|
|
1326
1355
|
* + :regexp([text]) 作用: 找到符合正则表达式的内容的指定元素
|
|
1327
1356
|
* @param selector 选择器
|
|
1357
|
+
* @param parent 指定父元素
|
|
1328
1358
|
* @example
|
|
1329
1359
|
* DOMUtils.selectorAll("div:contains('测试')")
|
|
1330
1360
|
* > [div.xxx]
|
|
@@ -1339,18 +1369,24 @@ export class DOMUtilsEvent {
|
|
|
1339
1369
|
* > [div.xxx]
|
|
1340
1370
|
*/
|
|
1341
1371
|
selectorAll<K extends keyof HTMLElementTagNameMap>(
|
|
1342
|
-
selector: K
|
|
1372
|
+
selector: K,
|
|
1373
|
+
parent?: Element | Document | DocumentFragment | ShadowRoot
|
|
1343
1374
|
): HTMLElementTagNameMap[K][];
|
|
1344
|
-
selectorAll<E extends Element = Element>(
|
|
1345
|
-
|
|
1375
|
+
selectorAll<E extends Element = Element>(
|
|
1376
|
+
selector: string,
|
|
1377
|
+
parent?: Element | Document | DocumentFragment | ShadowRoot
|
|
1378
|
+
): E[];
|
|
1379
|
+
selectorAll<E extends Element = Element>(
|
|
1380
|
+
selector: string,
|
|
1381
|
+
parent?: Element | Document | DocumentFragment | ShadowRoot
|
|
1382
|
+
) {
|
|
1346
1383
|
const context = this;
|
|
1384
|
+
parent = parent || context.windowApi.document;
|
|
1347
1385
|
selector = selector.trim();
|
|
1348
1386
|
if (selector.match(/[^\s]{1}:empty$/gi)) {
|
|
1349
1387
|
// empty 语法
|
|
1350
1388
|
selector = selector.replace(/:empty$/gi, "");
|
|
1351
|
-
return Array.from(
|
|
1352
|
-
context.windowApi.document.querySelectorAll<E>(selector)
|
|
1353
|
-
).filter(($ele) => {
|
|
1389
|
+
return Array.from(parent.querySelectorAll<E>(selector)).filter(($ele) => {
|
|
1354
1390
|
return $ele?.innerHTML?.trim() === "";
|
|
1355
1391
|
});
|
|
1356
1392
|
} else if (
|
|
@@ -1361,9 +1397,7 @@ export class DOMUtilsEvent {
|
|
|
1361
1397
|
let textMatch = selector.match(/:contains\(("|')(.*)("|')\)$/i);
|
|
1362
1398
|
let text = textMatch![2];
|
|
1363
1399
|
selector = selector.replace(/:contains\(("|')(.*)("|')\)$/gi, "");
|
|
1364
|
-
return Array.from(
|
|
1365
|
-
context.windowApi.document.querySelectorAll<E>(selector)
|
|
1366
|
-
).filter(($ele) => {
|
|
1400
|
+
return Array.from(parent.querySelectorAll<E>(selector)).filter(($ele) => {
|
|
1367
1401
|
// @ts-ignore
|
|
1368
1402
|
return ($ele?.textContent || $ele?.innerText)?.includes(text);
|
|
1369
1403
|
});
|
|
@@ -1382,17 +1416,13 @@ export class DOMUtilsEvent {
|
|
|
1382
1416
|
}
|
|
1383
1417
|
let regexp = new RegExp(pattern, flags);
|
|
1384
1418
|
selector = selector.replace(/:regexp\(("|')(.*)("|')\)$/gi, "");
|
|
1385
|
-
return Array.from(
|
|
1386
|
-
context.windowApi.document.querySelectorAll<E>(selector)
|
|
1387
|
-
).filter(($ele) => {
|
|
1419
|
+
return Array.from(parent.querySelectorAll<E>(selector)).filter(($ele) => {
|
|
1388
1420
|
// @ts-ignore
|
|
1389
1421
|
return Boolean(($ele?.textContent || $ele?.innerText)?.match(regexp));
|
|
1390
1422
|
});
|
|
1391
1423
|
} else {
|
|
1392
1424
|
// 普通语法
|
|
1393
|
-
return Array.from(
|
|
1394
|
-
context.windowApi.document.querySelectorAll<E>(selector)
|
|
1395
|
-
);
|
|
1425
|
+
return Array.from(parent.querySelectorAll<E>(selector));
|
|
1396
1426
|
}
|
|
1397
1427
|
}
|
|
1398
1428
|
/**
|