@whitesev/domutils 1.6.8 → 1.7.0
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 +1928 -1047
- package/dist/index.amd.js.map +1 -1
- package/dist/index.amd.min.js +2 -0
- package/dist/index.amd.min.js.map +1 -0
- package/dist/index.cjs.js +1928 -1047
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.cjs.min.js +2 -0
- package/dist/index.cjs.min.js.map +1 -0
- package/dist/index.esm.js +1928 -1047
- package/dist/index.esm.js.map +1 -1
- package/dist/index.esm.min.js +2 -0
- package/dist/index.esm.min.js.map +1 -0
- package/dist/index.iife.js +1928 -1047
- package/dist/index.iife.js.map +1 -1
- package/dist/index.iife.min.js +2 -0
- package/dist/index.iife.min.js.map +1 -0
- package/dist/index.system.js +1928 -1047
- package/dist/index.system.js.map +1 -1
- package/dist/index.system.min.js +2 -0
- package/dist/index.system.min.js.map +1 -0
- package/dist/index.umd.js +1928 -1047
- package/dist/index.umd.js.map +1 -1
- package/dist/index.umd.min.js +2 -0
- package/dist/index.umd.min.js.map +1 -0
- package/dist/types/index.d.ts +1 -1
- package/dist/types/src/{DOMUtilsCommonUtils.d.ts → CommonUtils.d.ts} +20 -8
- package/dist/types/src/ElementAnimate.d.ts +89 -0
- package/dist/types/src/{DOMUtilsEvent.d.ts → ElementEvent.d.ts} +19 -84
- package/dist/types/src/ElementHandler.d.ts +17 -0
- package/dist/types/src/ElementSelector.d.ts +96 -0
- package/dist/types/src/ElementWait.d.ts +278 -0
- package/dist/types/src/GlobalData.d.ts +4 -0
- package/dist/types/src/{DOMUtilsOriginPrototype.d.ts → OriginPrototype.d.ts} +1 -2
- package/dist/types/src/Utils.d.ts +68 -0
- package/dist/types/src/{DOMUtils.d.ts → index.d.ts} +157 -177
- package/dist/types/src/types/env.d.ts +9 -0
- package/dist/types/src/types/global.d.ts +0 -2
- package/dist/types/src/types/gm.d.ts +0 -4
- package/index.ts +1 -1
- package/package.json +6 -2
- package/src/{DOMUtilsCommonUtils.ts → CommonUtils.ts} +25 -11
- package/src/ElementAnimate.ts +290 -0
- package/src/{DOMUtilsEvent.ts → ElementEvent.ts} +166 -361
- package/src/ElementHandler.ts +43 -0
- package/src/ElementSelector.ts +260 -0
- package/src/ElementWait.ts +699 -0
- package/src/GlobalData.ts +5 -0
- package/src/{DOMUtilsOriginPrototype.ts → OriginPrototype.ts} +1 -3
- package/src/Utils.ts +386 -0
- package/src/{DOMUtils.ts → index.ts} +678 -757
- package/src/types/env.d.ts +9 -0
- package/src/types/global.d.ts +0 -2
- package/src/types/gm.d.ts +0 -4
- package/dist/types/src/DOMUtilsData.d.ts +0 -5
- package/src/DOMUtilsData.ts +0 -7
package/src/Utils.ts
ADDED
|
@@ -0,0 +1,386 @@
|
|
|
1
|
+
import type { WindowApiOption } from "./types/WindowApi";
|
|
2
|
+
import { WindowApi } from "./WindowApi";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* 判断对象是否是元素
|
|
6
|
+
* @param $el
|
|
7
|
+
* @returns
|
|
8
|
+
* + true 是元素
|
|
9
|
+
* + false 不是元素
|
|
10
|
+
* @example
|
|
11
|
+
* DOMUtilsCommonUtils.isDOM(document.querySelector("a"))
|
|
12
|
+
* > true
|
|
13
|
+
*/
|
|
14
|
+
const isDOM = function ($el: any): boolean {
|
|
15
|
+
return $el instanceof Node;
|
|
16
|
+
};
|
|
17
|
+
class Utils {
|
|
18
|
+
private windowApi: typeof WindowApi.prototype;
|
|
19
|
+
constructor(option?: WindowApiOption) {
|
|
20
|
+
this.windowApi = new WindowApi(option);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* 判断对象是否是jQuery对象
|
|
24
|
+
* @param target
|
|
25
|
+
* @returns
|
|
26
|
+
* + true 是jQuery对象
|
|
27
|
+
* + false 不是jQuery对象
|
|
28
|
+
* @example
|
|
29
|
+
* Utils.isJQuery($("a"))
|
|
30
|
+
* > true
|
|
31
|
+
*/
|
|
32
|
+
isJQuery(target: any): boolean {
|
|
33
|
+
let result = false;
|
|
34
|
+
if (typeof jQuery === "object" && target instanceof jQuery) {
|
|
35
|
+
result = true;
|
|
36
|
+
}
|
|
37
|
+
if (target == null) {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
if (typeof target === "object") {
|
|
41
|
+
/* 也有种可能,这个jQuery对象是1.8.3版本的,页面中的jQuery是3.4.1版本的 */
|
|
42
|
+
const jQueryProps = [
|
|
43
|
+
"add",
|
|
44
|
+
"addBack",
|
|
45
|
+
"addClass",
|
|
46
|
+
"after",
|
|
47
|
+
"ajaxComplete",
|
|
48
|
+
"ajaxError",
|
|
49
|
+
"ajaxSend",
|
|
50
|
+
"ajaxStart",
|
|
51
|
+
"ajaxStop",
|
|
52
|
+
"ajaxSuccess",
|
|
53
|
+
"animate",
|
|
54
|
+
"append",
|
|
55
|
+
"appendTo",
|
|
56
|
+
"attr",
|
|
57
|
+
"before",
|
|
58
|
+
"bind",
|
|
59
|
+
"blur",
|
|
60
|
+
"change",
|
|
61
|
+
"children",
|
|
62
|
+
"clearQueue",
|
|
63
|
+
"click",
|
|
64
|
+
"clone",
|
|
65
|
+
"closest",
|
|
66
|
+
"constructor",
|
|
67
|
+
"contents",
|
|
68
|
+
"contextmenu",
|
|
69
|
+
"css",
|
|
70
|
+
"data",
|
|
71
|
+
"dblclick",
|
|
72
|
+
"delay",
|
|
73
|
+
"delegate",
|
|
74
|
+
"dequeue",
|
|
75
|
+
"each",
|
|
76
|
+
"empty",
|
|
77
|
+
"end",
|
|
78
|
+
"eq",
|
|
79
|
+
"extend",
|
|
80
|
+
"fadeIn",
|
|
81
|
+
"fadeOut",
|
|
82
|
+
"fadeTo",
|
|
83
|
+
"fadeToggle",
|
|
84
|
+
"filter",
|
|
85
|
+
"find",
|
|
86
|
+
"first",
|
|
87
|
+
"focus",
|
|
88
|
+
"focusin",
|
|
89
|
+
"focusout",
|
|
90
|
+
"get",
|
|
91
|
+
"has",
|
|
92
|
+
"hasClass",
|
|
93
|
+
"height",
|
|
94
|
+
"hide",
|
|
95
|
+
"hover",
|
|
96
|
+
"html",
|
|
97
|
+
"index",
|
|
98
|
+
"init",
|
|
99
|
+
"innerHeight",
|
|
100
|
+
"innerWidth",
|
|
101
|
+
"insertAfter",
|
|
102
|
+
"insertBefore",
|
|
103
|
+
"is",
|
|
104
|
+
"jquery",
|
|
105
|
+
"keydown",
|
|
106
|
+
"keypress",
|
|
107
|
+
"keyup",
|
|
108
|
+
"last",
|
|
109
|
+
"load",
|
|
110
|
+
"map",
|
|
111
|
+
"mousedown",
|
|
112
|
+
"mouseenter",
|
|
113
|
+
"mouseleave",
|
|
114
|
+
"mousemove",
|
|
115
|
+
"mouseout",
|
|
116
|
+
"mouseover",
|
|
117
|
+
"mouseup",
|
|
118
|
+
"next",
|
|
119
|
+
"nextAll",
|
|
120
|
+
"not",
|
|
121
|
+
"off",
|
|
122
|
+
"offset",
|
|
123
|
+
"offsetParent",
|
|
124
|
+
"on",
|
|
125
|
+
"one",
|
|
126
|
+
"outerHeight",
|
|
127
|
+
"outerWidth",
|
|
128
|
+
"parent",
|
|
129
|
+
"parents",
|
|
130
|
+
"position",
|
|
131
|
+
"prepend",
|
|
132
|
+
"prependTo",
|
|
133
|
+
"prev",
|
|
134
|
+
"prevAll",
|
|
135
|
+
"prevUntil",
|
|
136
|
+
"promise",
|
|
137
|
+
"prop",
|
|
138
|
+
"pushStack",
|
|
139
|
+
"queue",
|
|
140
|
+
"ready",
|
|
141
|
+
"remove",
|
|
142
|
+
"removeAttr",
|
|
143
|
+
"removeClass",
|
|
144
|
+
"removeData",
|
|
145
|
+
"removeProp",
|
|
146
|
+
"replaceAll",
|
|
147
|
+
"replaceWith",
|
|
148
|
+
"resize",
|
|
149
|
+
"scroll",
|
|
150
|
+
"scrollLeft",
|
|
151
|
+
"scrollTop",
|
|
152
|
+
"select",
|
|
153
|
+
"show",
|
|
154
|
+
"siblings",
|
|
155
|
+
"slice",
|
|
156
|
+
"slideDown",
|
|
157
|
+
"slideToggle",
|
|
158
|
+
"slideUp",
|
|
159
|
+
"sort",
|
|
160
|
+
"splice",
|
|
161
|
+
"text",
|
|
162
|
+
"toArray",
|
|
163
|
+
"toggle",
|
|
164
|
+
"toggleClass",
|
|
165
|
+
"trigger",
|
|
166
|
+
"triggerHandler",
|
|
167
|
+
"unbind",
|
|
168
|
+
"width",
|
|
169
|
+
"wrap",
|
|
170
|
+
];
|
|
171
|
+
for (const jQueryPropsName of jQueryProps) {
|
|
172
|
+
if (!(jQueryPropsName in target)) {
|
|
173
|
+
result = false;
|
|
174
|
+
break;
|
|
175
|
+
} else {
|
|
176
|
+
result = true;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
return result;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* JSON数据从源端替换到目标端中,如果目标端存在该数据则替换,不添加,返回结果为目标端替换完毕的结果
|
|
184
|
+
* @param target 目标数据
|
|
185
|
+
* @param source 源数据
|
|
186
|
+
* @param isAdd 是否可以追加键,默认false
|
|
187
|
+
* @example
|
|
188
|
+
* Utils.assign({"1":1,"2":{"3":3}}, {"2":{"3":4}});
|
|
189
|
+
* >
|
|
190
|
+
* {
|
|
191
|
+
"1": 1,
|
|
192
|
+
"2": {
|
|
193
|
+
"3": 4
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
*/
|
|
197
|
+
assign<T1, T2 extends object, T3 extends boolean>(target: T1, source: T2, isAdd?: T3): T3 extends true ? T1 & T2 : T1;
|
|
198
|
+
assign(target = {}, source = {}, isAdd = false) {
|
|
199
|
+
const UtilsContext = this;
|
|
200
|
+
if (Array.isArray(source)) {
|
|
201
|
+
const canTraverse = source.filter((item) => {
|
|
202
|
+
return typeof item === "object";
|
|
203
|
+
});
|
|
204
|
+
if (!canTraverse.length) {
|
|
205
|
+
return source;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
if (source == null) {
|
|
209
|
+
return target;
|
|
210
|
+
}
|
|
211
|
+
if (target == null) {
|
|
212
|
+
target = {};
|
|
213
|
+
}
|
|
214
|
+
if (isAdd) {
|
|
215
|
+
for (const sourceKeyName in source) {
|
|
216
|
+
const targetKeyName = sourceKeyName;
|
|
217
|
+
const targetValue = Reflect.get(target, targetKeyName);
|
|
218
|
+
const sourceValue = Reflect.get(source, sourceKeyName);
|
|
219
|
+
if (typeof sourceValue === "object" && sourceValue != null && sourceKeyName in target && !isDOM(sourceValue)) {
|
|
220
|
+
/* 源端的值是object类型,且不是元素节点 */
|
|
221
|
+
Reflect.set(target, sourceKeyName, UtilsContext.assign(targetValue, sourceValue, isAdd));
|
|
222
|
+
continue;
|
|
223
|
+
}
|
|
224
|
+
Reflect.set(target, sourceKeyName, sourceValue);
|
|
225
|
+
}
|
|
226
|
+
} else {
|
|
227
|
+
for (const targetKeyName in target) {
|
|
228
|
+
if (targetKeyName in source) {
|
|
229
|
+
const targetValue = Reflect.get(target, targetKeyName);
|
|
230
|
+
const sourceValue = Reflect.get(source, targetKeyName);
|
|
231
|
+
if (
|
|
232
|
+
typeof sourceValue === "object" &&
|
|
233
|
+
sourceValue != null &&
|
|
234
|
+
!isDOM(sourceValue) &&
|
|
235
|
+
Object.keys(sourceValue).length
|
|
236
|
+
) {
|
|
237
|
+
/* 源端的值是object类型,且不是元素节点 */
|
|
238
|
+
Reflect.set(target, targetKeyName, UtilsContext.assign(targetValue, sourceValue, isAdd));
|
|
239
|
+
continue;
|
|
240
|
+
}
|
|
241
|
+
/* 直接赋值 */
|
|
242
|
+
Reflect.set(target, targetKeyName, sourceValue);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
return target;
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* 监听页面元素改变并处理
|
|
251
|
+
* @param target 需要监听的元素,如果不存在,可以等待它出现
|
|
252
|
+
* @param observer_config MutationObserver的配置
|
|
253
|
+
* @example
|
|
254
|
+
Utils.mutationObserver(document.querySelector("div.xxxx"),{
|
|
255
|
+
"callback":(mutations, observer)=>{},
|
|
256
|
+
"config":{childList:true,attributes:true}
|
|
257
|
+
});
|
|
258
|
+
* @example
|
|
259
|
+
Utils.mutationObserver(document.querySelectorAll("div.xxxx"),{
|
|
260
|
+
"callback":(mutations, observer)=>{},
|
|
261
|
+
"config":{childList:true,attributes:true}}
|
|
262
|
+
);
|
|
263
|
+
* @example
|
|
264
|
+
Utils.mutationObserver($("div.xxxx"),{
|
|
265
|
+
"callback":(mutations, observer)=>{},
|
|
266
|
+
"config":{childList:true,attributes:true}}
|
|
267
|
+
);
|
|
268
|
+
**/
|
|
269
|
+
mutationObserver(
|
|
270
|
+
target: HTMLElement | Node | NodeList | Document,
|
|
271
|
+
observer_config: {
|
|
272
|
+
/**
|
|
273
|
+
* observer的配置
|
|
274
|
+
*/
|
|
275
|
+
config?: MutationObserverInit;
|
|
276
|
+
/**
|
|
277
|
+
* 是否主动触发一次
|
|
278
|
+
*/
|
|
279
|
+
immediate?: boolean;
|
|
280
|
+
/**
|
|
281
|
+
* 触发的回调函数
|
|
282
|
+
*/
|
|
283
|
+
callback: MutationCallback;
|
|
284
|
+
}
|
|
285
|
+
): MutationObserver;
|
|
286
|
+
mutationObserver(
|
|
287
|
+
target: HTMLElement | Node | NodeList | Document,
|
|
288
|
+
observer_config: {
|
|
289
|
+
/**
|
|
290
|
+
* observer的配置
|
|
291
|
+
*/
|
|
292
|
+
config?: MutationObserverInit;
|
|
293
|
+
/**
|
|
294
|
+
* 是否主动触发一次
|
|
295
|
+
*/
|
|
296
|
+
immediate?: boolean;
|
|
297
|
+
/**
|
|
298
|
+
* 触发的回调函数
|
|
299
|
+
*/
|
|
300
|
+
callback: MutationCallback;
|
|
301
|
+
}
|
|
302
|
+
): MutationObserver {
|
|
303
|
+
const that = this;
|
|
304
|
+
|
|
305
|
+
const default_obverser_config = {
|
|
306
|
+
/* 监听到元素有反馈,需执行的函数 */
|
|
307
|
+
callback: () => {},
|
|
308
|
+
config: <MutationObserverInit>{
|
|
309
|
+
/**
|
|
310
|
+
* + true 监听以 target 为根节点的整个子树。包括子树中所有节点的属性,而不仅仅是针对 target
|
|
311
|
+
* + false (默认) 不生效
|
|
312
|
+
*/
|
|
313
|
+
subtree: void 0 as any as boolean,
|
|
314
|
+
/**
|
|
315
|
+
* + true 监听 target 节点中发生的节点的新增与删除(同时,如果 subtree 为 true,会针对整个子树生效)
|
|
316
|
+
* + false (默认) 不生效
|
|
317
|
+
*/
|
|
318
|
+
childList: void 0 as any as boolean,
|
|
319
|
+
/**
|
|
320
|
+
* + true 观察所有监听的节点属性值的变化。默认值为 true,当声明了 attributeFilter 或 attributeOldValue
|
|
321
|
+
* + false (默认) 不生效
|
|
322
|
+
*/
|
|
323
|
+
attributes: void 0 as any as boolean,
|
|
324
|
+
/**
|
|
325
|
+
* 一个用于声明哪些属性名会被监听的数组。如果不声明该属性,所有属性的变化都将触发通知
|
|
326
|
+
*/
|
|
327
|
+
attributeFilter: void 0 as any as string[],
|
|
328
|
+
/**
|
|
329
|
+
* + true 记录上一次被监听的节点的属性变化;可查阅 MutationObserver 中的 Monitoring attribute values 了解关于观察属性变化和属性值记录的详情
|
|
330
|
+
* + false (默认) 不生效
|
|
331
|
+
*/
|
|
332
|
+
attributeOldValue: void 0 as any as boolean,
|
|
333
|
+
/**
|
|
334
|
+
* + true 监听声明的 target 节点上所有字符的变化。默认值为 true,如果声明了 characterDataOldValue
|
|
335
|
+
* + false (默认) 不生效
|
|
336
|
+
*/
|
|
337
|
+
characterData: void 0 as any as boolean,
|
|
338
|
+
/**
|
|
339
|
+
* + true 记录前一个被监听的节点中发生的文本变化
|
|
340
|
+
* + false (默认) 不生效
|
|
341
|
+
*/
|
|
342
|
+
characterDataOldValue: void 0 as any as boolean,
|
|
343
|
+
},
|
|
344
|
+
immediate: false,
|
|
345
|
+
};
|
|
346
|
+
observer_config = that.assign(default_obverser_config, observer_config);
|
|
347
|
+
const windowMutationObserver =
|
|
348
|
+
this.windowApi.window.MutationObserver ||
|
|
349
|
+
this.windowApi.window.webkitMutationObserver ||
|
|
350
|
+
this.windowApi.window.MozMutationObserver;
|
|
351
|
+
// 观察者对象
|
|
352
|
+
const mutationObserver = new windowMutationObserver(function (
|
|
353
|
+
mutations: MutationRecord[],
|
|
354
|
+
observer: MutationObserver
|
|
355
|
+
) {
|
|
356
|
+
if (typeof observer_config.callback === "function") {
|
|
357
|
+
observer_config.callback(mutations, observer);
|
|
358
|
+
}
|
|
359
|
+
});
|
|
360
|
+
|
|
361
|
+
if (Array.isArray(target) || target instanceof NodeList) {
|
|
362
|
+
// 传入的是数组或者元素数组
|
|
363
|
+
target.forEach((item) => {
|
|
364
|
+
mutationObserver.observe(item, observer_config.config);
|
|
365
|
+
});
|
|
366
|
+
} else if (that.isJQuery(target)) {
|
|
367
|
+
/* 传入的参数是jQuery对象 */
|
|
368
|
+
(target as any).each((_: any, item: any) => {
|
|
369
|
+
mutationObserver.observe(item, observer_config.config);
|
|
370
|
+
});
|
|
371
|
+
} else {
|
|
372
|
+
mutationObserver.observe(target, observer_config.config);
|
|
373
|
+
}
|
|
374
|
+
if (observer_config.immediate) {
|
|
375
|
+
/* 主动触发一次 */
|
|
376
|
+
if (typeof observer_config.callback === "function") {
|
|
377
|
+
observer_config.callback([], mutationObserver);
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
return mutationObserver;
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
const utils = new Utils();
|
|
385
|
+
|
|
386
|
+
export { utils, Utils };
|