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