@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.
@@ -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
- let _selector_ = selector;
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
- function ownCallBack(event) {
259
+ /**
260
+ * 事件回调
261
+ * @param event
262
+ */
263
+ function domUtilsEventCallBack(event) {
251
264
  let target = event.target;
252
- if (_selector_) {
265
+ if (selectorList.length) {
253
266
  /* 存在自定义子元素选择器 */
254
267
  let totalParent = DOMUtilsCommonUtils.isWin(elementItem)
255
268
  ? DOMUtilsContext.windowApi.document.documentElement
256
269
  : elementItem;
257
- if (target.matches(_selector_)) {
258
- /* 当前目标可以被selector所匹配到 */
259
- _callback_.call(target, event);
260
- checkOptionOnceToRemoveEventListener();
261
- }
262
- else if (target.closest(_selector_) &&
263
- totalParent.contains(target.closest(_selector_))) {
264
- /* 在上层与主元素之间寻找可以被selector所匹配到的 */
265
- let closestElement = target.closest(_selector_);
266
- /* event的target值不能直接修改 */
267
- OriginPrototype.Object.defineProperty(event, "target", {
268
- get() {
269
- return closestElement;
270
- },
271
- });
272
- _callback_.call(closestElement, event);
273
- checkOptionOnceToRemoveEventListener();
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, ownCallBack, _option_);
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: _selector_,
307
+ selector: selectorList,
293
308
  option: _option_,
294
- callback: ownCallBack,
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
- let _selector_ = selector;
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 (!_selector_ || handler.selector === _selector_) {
377
- /* selector不为空,进行selector判断 */
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不为空,进行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\("(.*)"\)$/gi) ||
940
- selector.match(/[^\s]{1}:contains\('(.*)'\)$/gi)) {
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\("(.*)"\)$/gi) ||
951
- selector.match(/[^\s]{1}:regexp\('(.*)'\)$/gi)) {
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 text = textMatch[2];
955
- let regexp = new RegExp(text);
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.11.6";
1016
+ version = "2024.12.3";
982
1017
  attr(element, attrName, attrValue) {
983
1018
  let DOMUtilsContext = this;
984
1019
  if (typeof element === "string") {