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