@whitesev/domutils 1.4.0 → 1.4.3
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 +77 -42
- package/dist/index.amd.js.map +1 -1
- package/dist/index.cjs.js +77 -42
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.esm.js +77 -42
- package/dist/index.esm.js.map +1 -1
- package/dist/index.iife.js +77 -42
- package/dist/index.iife.js.map +1 -1
- package/dist/index.system.js +77 -42
- package/dist/index.system.js.map +1 -1
- package/dist/index.umd.js +77 -42
- package/dist/index.umd.js.map +1 -1
- package/dist/types/src/DOMUtilsEvent.d.ts +8 -5
- package/dist/types/src/types/DOMUtilsEvent.d.ts +4 -4
- package/package.json +4 -3
- package/src/DOMUtils.ts +1 -1
- package/src/DOMUtilsEvent.ts +106 -63
- package/src/types/DOMUtilsEvent.d.ts +4 -4
package/dist/index.umd.js
CHANGED
|
@@ -217,6 +217,7 @@
|
|
|
217
217
|
else {
|
|
218
218
|
elementList.push(element);
|
|
219
219
|
}
|
|
220
|
+
// 事件名
|
|
220
221
|
let eventTypeList = [];
|
|
221
222
|
if (Array.isArray(eventType)) {
|
|
222
223
|
eventTypeList = eventTypeList.concat(eventType);
|
|
@@ -224,8 +225,17 @@
|
|
|
224
225
|
else if (typeof eventType === "string") {
|
|
225
226
|
eventTypeList = eventTypeList.concat(eventType.split(" "));
|
|
226
227
|
}
|
|
227
|
-
|
|
228
|
+
// 子元素选择器
|
|
229
|
+
let selectorList = [];
|
|
230
|
+
if (Array.isArray(selector)) {
|
|
231
|
+
selectorList = selectorList.concat(selector);
|
|
232
|
+
}
|
|
233
|
+
else if (typeof selector === "string") {
|
|
234
|
+
selectorList.push(selector);
|
|
235
|
+
}
|
|
236
|
+
// 事件回调
|
|
228
237
|
let _callback_ = callback;
|
|
238
|
+
// 事件配置
|
|
229
239
|
let _option_ = {
|
|
230
240
|
capture: false,
|
|
231
241
|
once: false,
|
|
@@ -233,7 +243,6 @@
|
|
|
233
243
|
};
|
|
234
244
|
if (typeof selector === "function") {
|
|
235
245
|
/* 这是为没有selector的情况 */
|
|
236
|
-
_selector_ = void 0;
|
|
237
246
|
_callback_ = selector;
|
|
238
247
|
_option_ = getOption(args, 3, _option_);
|
|
239
248
|
}
|
|
@@ -250,30 +259,39 @@
|
|
|
250
259
|
}
|
|
251
260
|
}
|
|
252
261
|
elementList.forEach((elementItem) => {
|
|
253
|
-
|
|
262
|
+
/**
|
|
263
|
+
* 事件回调
|
|
264
|
+
* @param event
|
|
265
|
+
*/
|
|
266
|
+
function domUtilsEventCallBack(event) {
|
|
254
267
|
let target = event.target;
|
|
255
|
-
if (
|
|
268
|
+
if (selectorList.length) {
|
|
256
269
|
/* 存在自定义子元素选择器 */
|
|
257
270
|
let totalParent = DOMUtilsCommonUtils.isWin(elementItem)
|
|
258
271
|
? DOMUtilsContext.windowApi.document.documentElement
|
|
259
272
|
: elementItem;
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
273
|
+
for (let index = 0; index < selectorList.length; index++) {
|
|
274
|
+
const selectorItem = selectorList[index];
|
|
275
|
+
if (target.matches(selectorItem)) {
|
|
276
|
+
/* 当前目标可以被selector所匹配到 */
|
|
277
|
+
_callback_.call(target, event);
|
|
278
|
+
checkOptionOnceToRemoveEventListener();
|
|
279
|
+
break;
|
|
280
|
+
}
|
|
281
|
+
else if (target.closest(selectorItem) &&
|
|
282
|
+
totalParent.contains(target.closest(selectorItem))) {
|
|
283
|
+
/* 在上层与主元素之间寻找可以被selector所匹配到的 */
|
|
284
|
+
let closestElement = target.closest(selectorItem);
|
|
285
|
+
/* event的target值不能直接修改 */
|
|
286
|
+
OriginPrototype.Object.defineProperty(event, "target", {
|
|
287
|
+
get() {
|
|
288
|
+
return closestElement;
|
|
289
|
+
},
|
|
290
|
+
});
|
|
291
|
+
_callback_.call(closestElement, event);
|
|
292
|
+
checkOptionOnceToRemoveEventListener();
|
|
293
|
+
break;
|
|
294
|
+
}
|
|
277
295
|
}
|
|
278
296
|
}
|
|
279
297
|
else {
|
|
@@ -283,21 +301,19 @@
|
|
|
283
301
|
}
|
|
284
302
|
/* 遍历事件名设置元素事件 */
|
|
285
303
|
eventTypeList.forEach((eventName) => {
|
|
286
|
-
elementItem.addEventListener(eventName,
|
|
287
|
-
if (_callback_ && _callback_.delegate) {
|
|
288
|
-
elementItem.setAttribute("data-delegate", _selector_);
|
|
289
|
-
}
|
|
304
|
+
elementItem.addEventListener(eventName, domUtilsEventCallBack, _option_);
|
|
290
305
|
/* 获取对象上的事件 */
|
|
291
306
|
let elementEvents = elementItem[DOMUtilsData.SymbolEvents] || {};
|
|
292
307
|
/* 初始化对象上的xx事件 */
|
|
293
308
|
elementEvents[eventName] = elementEvents[eventName] || [];
|
|
294
309
|
elementEvents[eventName].push({
|
|
295
|
-
selector:
|
|
310
|
+
selector: selectorList,
|
|
296
311
|
option: _option_,
|
|
297
|
-
callback:
|
|
312
|
+
callback: domUtilsEventCallBack,
|
|
298
313
|
originCallBack: _callback_,
|
|
299
314
|
});
|
|
300
315
|
/* 覆盖事件 */
|
|
316
|
+
// @ts-ignore
|
|
301
317
|
elementItem[DOMUtilsData.SymbolEvents] = elementEvents;
|
|
302
318
|
});
|
|
303
319
|
});
|
|
@@ -342,10 +358,14 @@
|
|
|
342
358
|
else if (typeof eventType === "string") {
|
|
343
359
|
eventTypeList = eventTypeList.concat(eventType.split(" "));
|
|
344
360
|
}
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
361
|
+
// 子元素选择器
|
|
362
|
+
let selectorList = [];
|
|
363
|
+
if (Array.isArray(selector)) {
|
|
364
|
+
selectorList = selectorList.concat(selector);
|
|
365
|
+
}
|
|
366
|
+
else if (typeof selector === "string") {
|
|
367
|
+
selectorList.push(selector);
|
|
368
|
+
}
|
|
349
369
|
/**
|
|
350
370
|
* 事件的回调函数
|
|
351
371
|
*/
|
|
@@ -358,7 +378,6 @@
|
|
|
358
378
|
};
|
|
359
379
|
if (typeof selector === "function") {
|
|
360
380
|
/* 这是为没有selector的情况 */
|
|
361
|
-
_selector_ = void 0;
|
|
362
381
|
_callback_ = selector;
|
|
363
382
|
_option_ = getOption(args, 3, _option_);
|
|
364
383
|
}
|
|
@@ -367,6 +386,7 @@
|
|
|
367
386
|
}
|
|
368
387
|
elementList.forEach((elementItem) => {
|
|
369
388
|
/* 获取对象上的事件 */
|
|
389
|
+
// @ts-ignore
|
|
370
390
|
let elementEvents = elementItem[DOMUtilsData.SymbolEvents] || {};
|
|
371
391
|
eventTypeList.forEach((eventName) => {
|
|
372
392
|
let handlers = elementEvents[eventName] || [];
|
|
@@ -376,14 +396,21 @@
|
|
|
376
396
|
for (let index = 0; index < handlers.length; index++) {
|
|
377
397
|
let handler = handlers[index];
|
|
378
398
|
let flag = false;
|
|
379
|
-
if (!
|
|
380
|
-
|
|
399
|
+
if (!selectorList.length) {
|
|
400
|
+
// selectorList是空的,默认移除
|
|
381
401
|
flag = true;
|
|
382
402
|
}
|
|
403
|
+
else {
|
|
404
|
+
if (Array.isArray(handler.selector) &&
|
|
405
|
+
JSON.stringify(handler.selector) === JSON.stringify(selectorList)) {
|
|
406
|
+
// 元素上的selectorList不为空且和传入的相同
|
|
407
|
+
flag = true;
|
|
408
|
+
}
|
|
409
|
+
}
|
|
383
410
|
if (!_callback_ ||
|
|
384
411
|
handler.callback === _callback_ ||
|
|
385
412
|
handler.originCallBack === _callback_) {
|
|
386
|
-
/* callback
|
|
413
|
+
/* callback不为空,且callback相同 */
|
|
387
414
|
flag = true;
|
|
388
415
|
}
|
|
389
416
|
if (flag) {
|
|
@@ -396,6 +423,7 @@
|
|
|
396
423
|
DOMUtilsCommonUtils.delete(elementEvents, eventType);
|
|
397
424
|
}
|
|
398
425
|
});
|
|
426
|
+
// @ts-ignore
|
|
399
427
|
elementItem[DOMUtilsData.SymbolEvents] = elementEvents;
|
|
400
428
|
});
|
|
401
429
|
}
|
|
@@ -445,6 +473,7 @@
|
|
|
445
473
|
capture: handler["option"]["capture"],
|
|
446
474
|
});
|
|
447
475
|
}
|
|
476
|
+
// @ts-ignore
|
|
448
477
|
DOMUtilsCommonUtils.delete(elementItem[symbolEvents], eventName);
|
|
449
478
|
});
|
|
450
479
|
});
|
|
@@ -939,8 +968,8 @@
|
|
|
939
968
|
return $ele?.innerHTML?.trim() === "";
|
|
940
969
|
});
|
|
941
970
|
}
|
|
942
|
-
else if (selector.match(/[^\s]{1}:contains\("(.*)"\)$/
|
|
943
|
-
selector.match(/[^\s]{1}:contains\('(.*)'\)$/
|
|
971
|
+
else if (selector.match(/[^\s]{1}:contains\("(.*)"\)$/i) ||
|
|
972
|
+
selector.match(/[^\s]{1}:contains\('(.*)'\)$/i)) {
|
|
944
973
|
// contains 语法
|
|
945
974
|
let textMatch = selector.match(/:contains\(("|')(.*)("|')\)$/i);
|
|
946
975
|
let text = textMatch[2];
|
|
@@ -950,12 +979,18 @@
|
|
|
950
979
|
return ($ele?.textContent || $ele?.innerText)?.includes(text);
|
|
951
980
|
});
|
|
952
981
|
}
|
|
953
|
-
else if (selector.match(/[^\s]{1}:regexp\("(.*)"\)$/
|
|
954
|
-
selector.match(/[^\s]{1}:regexp\('(.*)'\)$/
|
|
982
|
+
else if (selector.match(/[^\s]{1}:regexp\("(.*)"\)$/i) ||
|
|
983
|
+
selector.match(/[^\s]{1}:regexp\('(.*)'\)$/i)) {
|
|
955
984
|
// regexp 语法
|
|
956
985
|
let textMatch = selector.match(/:regexp\(("|')(.*)("|')\)$/i);
|
|
957
|
-
let
|
|
958
|
-
let
|
|
986
|
+
let pattern = textMatch[2];
|
|
987
|
+
let flagMatch = pattern.match(/("|'),[\s]*("|')([igm]{0,3})$/i);
|
|
988
|
+
let flags = "";
|
|
989
|
+
if (flagMatch) {
|
|
990
|
+
pattern = pattern.replace(/("|'),[\s]*("|')([igm]{0,3})$/gi, "");
|
|
991
|
+
flags = flagMatch[3];
|
|
992
|
+
}
|
|
993
|
+
let regexp = new RegExp(pattern, flags);
|
|
959
994
|
selector = selector.replace(/:regexp\(("|')(.*)("|')\)$/gi, "");
|
|
960
995
|
return Array.from(context.windowApi.document.querySelectorAll(selector)).filter(($ele) => {
|
|
961
996
|
// @ts-ignore
|
|
@@ -981,7 +1016,7 @@
|
|
|
981
1016
|
super(option);
|
|
982
1017
|
}
|
|
983
1018
|
/** 版本号 */
|
|
984
|
-
version = "2024.
|
|
1019
|
+
version = "2024.12.3";
|
|
985
1020
|
attr(element, attrName, attrValue) {
|
|
986
1021
|
let DOMUtilsContext = this;
|
|
987
1022
|
if (typeof element === "string") {
|