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