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