@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.esm.js
CHANGED
|
@@ -211,6 +211,7 @@ class DOMUtilsEvent {
|
|
|
211
211
|
else {
|
|
212
212
|
elementList.push(element);
|
|
213
213
|
}
|
|
214
|
+
// 事件名
|
|
214
215
|
let eventTypeList = [];
|
|
215
216
|
if (Array.isArray(eventType)) {
|
|
216
217
|
eventTypeList = eventTypeList.concat(eventType);
|
|
@@ -218,8 +219,17 @@ class DOMUtilsEvent {
|
|
|
218
219
|
else if (typeof eventType === "string") {
|
|
219
220
|
eventTypeList = eventTypeList.concat(eventType.split(" "));
|
|
220
221
|
}
|
|
221
|
-
|
|
222
|
+
// 子元素选择器
|
|
223
|
+
let selectorList = [];
|
|
224
|
+
if (Array.isArray(selector)) {
|
|
225
|
+
selectorList = selectorList.concat(selector);
|
|
226
|
+
}
|
|
227
|
+
else if (typeof selector === "string") {
|
|
228
|
+
selectorList.push(selector);
|
|
229
|
+
}
|
|
230
|
+
// 事件回调
|
|
222
231
|
let _callback_ = callback;
|
|
232
|
+
// 事件配置
|
|
223
233
|
let _option_ = {
|
|
224
234
|
capture: false,
|
|
225
235
|
once: false,
|
|
@@ -227,7 +237,6 @@ class DOMUtilsEvent {
|
|
|
227
237
|
};
|
|
228
238
|
if (typeof selector === "function") {
|
|
229
239
|
/* 这是为没有selector的情况 */
|
|
230
|
-
_selector_ = void 0;
|
|
231
240
|
_callback_ = selector;
|
|
232
241
|
_option_ = getOption(args, 3, _option_);
|
|
233
242
|
}
|
|
@@ -244,30 +253,39 @@ class DOMUtilsEvent {
|
|
|
244
253
|
}
|
|
245
254
|
}
|
|
246
255
|
elementList.forEach((elementItem) => {
|
|
247
|
-
|
|
256
|
+
/**
|
|
257
|
+
* 事件回调
|
|
258
|
+
* @param event
|
|
259
|
+
*/
|
|
260
|
+
function domUtilsEventCallBack(event) {
|
|
248
261
|
let target = event.target;
|
|
249
|
-
if (
|
|
262
|
+
if (selectorList.length) {
|
|
250
263
|
/* 存在自定义子元素选择器 */
|
|
251
264
|
let totalParent = DOMUtilsCommonUtils.isWin(elementItem)
|
|
252
265
|
? DOMUtilsContext.windowApi.document.documentElement
|
|
253
266
|
: elementItem;
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
267
|
+
for (let index = 0; index < selectorList.length; index++) {
|
|
268
|
+
const selectorItem = selectorList[index];
|
|
269
|
+
if (target.matches(selectorItem)) {
|
|
270
|
+
/* 当前目标可以被selector所匹配到 */
|
|
271
|
+
_callback_.call(target, event);
|
|
272
|
+
checkOptionOnceToRemoveEventListener();
|
|
273
|
+
break;
|
|
274
|
+
}
|
|
275
|
+
else if (target.closest(selectorItem) &&
|
|
276
|
+
totalParent.contains(target.closest(selectorItem))) {
|
|
277
|
+
/* 在上层与主元素之间寻找可以被selector所匹配到的 */
|
|
278
|
+
let closestElement = target.closest(selectorItem);
|
|
279
|
+
/* event的target值不能直接修改 */
|
|
280
|
+
OriginPrototype.Object.defineProperty(event, "target", {
|
|
281
|
+
get() {
|
|
282
|
+
return closestElement;
|
|
283
|
+
},
|
|
284
|
+
});
|
|
285
|
+
_callback_.call(closestElement, event);
|
|
286
|
+
checkOptionOnceToRemoveEventListener();
|
|
287
|
+
break;
|
|
288
|
+
}
|
|
271
289
|
}
|
|
272
290
|
}
|
|
273
291
|
else {
|
|
@@ -277,21 +295,19 @@ class DOMUtilsEvent {
|
|
|
277
295
|
}
|
|
278
296
|
/* 遍历事件名设置元素事件 */
|
|
279
297
|
eventTypeList.forEach((eventName) => {
|
|
280
|
-
elementItem.addEventListener(eventName,
|
|
281
|
-
if (_callback_ && _callback_.delegate) {
|
|
282
|
-
elementItem.setAttribute("data-delegate", _selector_);
|
|
283
|
-
}
|
|
298
|
+
elementItem.addEventListener(eventName, domUtilsEventCallBack, _option_);
|
|
284
299
|
/* 获取对象上的事件 */
|
|
285
300
|
let elementEvents = elementItem[DOMUtilsData.SymbolEvents] || {};
|
|
286
301
|
/* 初始化对象上的xx事件 */
|
|
287
302
|
elementEvents[eventName] = elementEvents[eventName] || [];
|
|
288
303
|
elementEvents[eventName].push({
|
|
289
|
-
selector:
|
|
304
|
+
selector: selectorList,
|
|
290
305
|
option: _option_,
|
|
291
|
-
callback:
|
|
306
|
+
callback: domUtilsEventCallBack,
|
|
292
307
|
originCallBack: _callback_,
|
|
293
308
|
});
|
|
294
309
|
/* 覆盖事件 */
|
|
310
|
+
// @ts-ignore
|
|
295
311
|
elementItem[DOMUtilsData.SymbolEvents] = elementEvents;
|
|
296
312
|
});
|
|
297
313
|
});
|
|
@@ -336,10 +352,14 @@ class DOMUtilsEvent {
|
|
|
336
352
|
else if (typeof eventType === "string") {
|
|
337
353
|
eventTypeList = eventTypeList.concat(eventType.split(" "));
|
|
338
354
|
}
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
355
|
+
// 子元素选择器
|
|
356
|
+
let selectorList = [];
|
|
357
|
+
if (Array.isArray(selector)) {
|
|
358
|
+
selectorList = selectorList.concat(selector);
|
|
359
|
+
}
|
|
360
|
+
else if (typeof selector === "string") {
|
|
361
|
+
selectorList.push(selector);
|
|
362
|
+
}
|
|
343
363
|
/**
|
|
344
364
|
* 事件的回调函数
|
|
345
365
|
*/
|
|
@@ -352,7 +372,6 @@ class DOMUtilsEvent {
|
|
|
352
372
|
};
|
|
353
373
|
if (typeof selector === "function") {
|
|
354
374
|
/* 这是为没有selector的情况 */
|
|
355
|
-
_selector_ = void 0;
|
|
356
375
|
_callback_ = selector;
|
|
357
376
|
_option_ = getOption(args, 3, _option_);
|
|
358
377
|
}
|
|
@@ -361,6 +380,7 @@ class DOMUtilsEvent {
|
|
|
361
380
|
}
|
|
362
381
|
elementList.forEach((elementItem) => {
|
|
363
382
|
/* 获取对象上的事件 */
|
|
383
|
+
// @ts-ignore
|
|
364
384
|
let elementEvents = elementItem[DOMUtilsData.SymbolEvents] || {};
|
|
365
385
|
eventTypeList.forEach((eventName) => {
|
|
366
386
|
let handlers = elementEvents[eventName] || [];
|
|
@@ -370,14 +390,21 @@ class DOMUtilsEvent {
|
|
|
370
390
|
for (let index = 0; index < handlers.length; index++) {
|
|
371
391
|
let handler = handlers[index];
|
|
372
392
|
let flag = false;
|
|
373
|
-
if (!
|
|
374
|
-
|
|
393
|
+
if (!selectorList.length) {
|
|
394
|
+
// selectorList是空的,默认移除
|
|
375
395
|
flag = true;
|
|
376
396
|
}
|
|
397
|
+
else {
|
|
398
|
+
if (Array.isArray(handler.selector) &&
|
|
399
|
+
JSON.stringify(handler.selector) === JSON.stringify(selectorList)) {
|
|
400
|
+
// 元素上的selectorList不为空且和传入的相同
|
|
401
|
+
flag = true;
|
|
402
|
+
}
|
|
403
|
+
}
|
|
377
404
|
if (!_callback_ ||
|
|
378
405
|
handler.callback === _callback_ ||
|
|
379
406
|
handler.originCallBack === _callback_) {
|
|
380
|
-
/* callback
|
|
407
|
+
/* callback不为空,且callback相同 */
|
|
381
408
|
flag = true;
|
|
382
409
|
}
|
|
383
410
|
if (flag) {
|
|
@@ -390,6 +417,7 @@ class DOMUtilsEvent {
|
|
|
390
417
|
DOMUtilsCommonUtils.delete(elementEvents, eventType);
|
|
391
418
|
}
|
|
392
419
|
});
|
|
420
|
+
// @ts-ignore
|
|
393
421
|
elementItem[DOMUtilsData.SymbolEvents] = elementEvents;
|
|
394
422
|
});
|
|
395
423
|
}
|
|
@@ -439,6 +467,7 @@ class DOMUtilsEvent {
|
|
|
439
467
|
capture: handler["option"]["capture"],
|
|
440
468
|
});
|
|
441
469
|
}
|
|
470
|
+
// @ts-ignore
|
|
442
471
|
DOMUtilsCommonUtils.delete(elementItem[symbolEvents], eventName);
|
|
443
472
|
});
|
|
444
473
|
});
|
|
@@ -933,8 +962,8 @@ class DOMUtilsEvent {
|
|
|
933
962
|
return $ele?.innerHTML?.trim() === "";
|
|
934
963
|
});
|
|
935
964
|
}
|
|
936
|
-
else if (selector.match(/[^\s]{1}:contains\("(.*)"\)$/
|
|
937
|
-
selector.match(/[^\s]{1}:contains\('(.*)'\)$/
|
|
965
|
+
else if (selector.match(/[^\s]{1}:contains\("(.*)"\)$/i) ||
|
|
966
|
+
selector.match(/[^\s]{1}:contains\('(.*)'\)$/i)) {
|
|
938
967
|
// contains 语法
|
|
939
968
|
let textMatch = selector.match(/:contains\(("|')(.*)("|')\)$/i);
|
|
940
969
|
let text = textMatch[2];
|
|
@@ -944,12 +973,18 @@ class DOMUtilsEvent {
|
|
|
944
973
|
return ($ele?.textContent || $ele?.innerText)?.includes(text);
|
|
945
974
|
});
|
|
946
975
|
}
|
|
947
|
-
else if (selector.match(/[^\s]{1}:regexp\("(.*)"\)$/
|
|
948
|
-
selector.match(/[^\s]{1}:regexp\('(.*)'\)$/
|
|
976
|
+
else if (selector.match(/[^\s]{1}:regexp\("(.*)"\)$/i) ||
|
|
977
|
+
selector.match(/[^\s]{1}:regexp\('(.*)'\)$/i)) {
|
|
949
978
|
// regexp 语法
|
|
950
979
|
let textMatch = selector.match(/:regexp\(("|')(.*)("|')\)$/i);
|
|
951
|
-
let
|
|
952
|
-
let
|
|
980
|
+
let pattern = textMatch[2];
|
|
981
|
+
let flagMatch = pattern.match(/("|'),[\s]*("|')([igm]{0,3})$/i);
|
|
982
|
+
let flags = "";
|
|
983
|
+
if (flagMatch) {
|
|
984
|
+
pattern = pattern.replace(/("|'),[\s]*("|')([igm]{0,3})$/gi, "");
|
|
985
|
+
flags = flagMatch[3];
|
|
986
|
+
}
|
|
987
|
+
let regexp = new RegExp(pattern, flags);
|
|
953
988
|
selector = selector.replace(/:regexp\(("|')(.*)("|')\)$/gi, "");
|
|
954
989
|
return Array.from(context.windowApi.document.querySelectorAll(selector)).filter(($ele) => {
|
|
955
990
|
// @ts-ignore
|
|
@@ -975,7 +1010,7 @@ class DOMUtils extends DOMUtilsEvent {
|
|
|
975
1010
|
super(option);
|
|
976
1011
|
}
|
|
977
1012
|
/** 版本号 */
|
|
978
|
-
version = "2024.
|
|
1013
|
+
version = "2024.12.3";
|
|
979
1014
|
attr(element, attrName, attrValue) {
|
|
980
1015
|
let DOMUtilsContext = this;
|
|
981
1016
|
if (typeof element === "string") {
|