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