@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.cjs.js CHANGED
@@ -213,6 +213,7 @@ class DOMUtilsEvent {
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 @@ class DOMUtilsEvent {
220
221
  else if (typeof eventType === "string") {
221
222
  eventTypeList = eventTypeList.concat(eventType.split(" "));
222
223
  }
223
- let _selector_ = selector;
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 @@ class DOMUtilsEvent {
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 @@ class DOMUtilsEvent {
246
255
  }
247
256
  }
248
257
  elementList.forEach((elementItem) => {
249
- function ownCallBack(event) {
258
+ /**
259
+ * 事件回调
260
+ * @param event
261
+ */
262
+ function domUtilsEventCallBack(event) {
250
263
  let target = event.target;
251
- if (_selector_) {
264
+ if (selectorList.length) {
252
265
  /* 存在自定义子元素选择器 */
253
266
  let totalParent = DOMUtilsCommonUtils.isWin(elementItem)
254
267
  ? DOMUtilsContext.windowApi.document.documentElement
255
268
  : elementItem;
256
- if (target.matches(_selector_)) {
257
- /* 当前目标可以被selector所匹配到 */
258
- _callback_.call(target, event);
259
- checkOptionOnceToRemoveEventListener();
260
- }
261
- else if (target.closest(_selector_) &&
262
- totalParent.contains(target.closest(_selector_))) {
263
- /* 在上层与主元素之间寻找可以被selector所匹配到的 */
264
- let closestElement = target.closest(_selector_);
265
- /* event的target值不能直接修改 */
266
- OriginPrototype.Object.defineProperty(event, "target", {
267
- get() {
268
- return closestElement;
269
- },
270
- });
271
- _callback_.call(closestElement, event);
272
- checkOptionOnceToRemoveEventListener();
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 @@ class DOMUtilsEvent {
279
297
  }
280
298
  /* 遍历事件名设置元素事件 */
281
299
  eventTypeList.forEach((eventName) => {
282
- elementItem.addEventListener(eventName, ownCallBack, _option_);
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: _selector_,
306
+ selector: selectorList,
292
307
  option: _option_,
293
- callback: ownCallBack,
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 @@ class DOMUtilsEvent {
338
354
  else if (typeof eventType === "string") {
339
355
  eventTypeList = eventTypeList.concat(eventType.split(" "));
340
356
  }
341
- /**
342
- * 子元素选择器
343
- */
344
- let _selector_ = selector;
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 @@ class DOMUtilsEvent {
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 @@ class DOMUtilsEvent {
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 @@ class DOMUtilsEvent {
372
392
  for (let index = 0; index < handlers.length; index++) {
373
393
  let handler = handlers[index];
374
394
  let flag = false;
375
- if (!_selector_ || handler.selector === _selector_) {
376
- /* selector不为空,进行selector判断 */
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不为空,进行callback判断 */
409
+ /* callback不为空,且callback相同 */
383
410
  flag = true;
384
411
  }
385
412
  if (flag) {
@@ -392,6 +419,7 @@ class DOMUtilsEvent {
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 @@ class DOMUtilsEvent {
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 @@ class DOMUtilsEvent {
935
964
  return $ele?.innerHTML?.trim() === "";
936
965
  });
937
966
  }
938
- else if (selector.match(/[^\s]{1}:contains\("(.*)"\)$/gi) ||
939
- selector.match(/[^\s]{1}:contains\('(.*)'\)$/gi)) {
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 @@ class DOMUtilsEvent {
946
975
  return ($ele?.textContent || $ele?.innerText)?.includes(text);
947
976
  });
948
977
  }
949
- else if (selector.match(/[^\s]{1}:regexp\("(.*)"\)$/gi) ||
950
- selector.match(/[^\s]{1}:regexp\('(.*)'\)$/gi)) {
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 text = textMatch[2];
954
- let regexp = new RegExp(text);
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 @@ class DOMUtils extends DOMUtilsEvent {
977
1012
  super(option);
978
1013
  }
979
1014
  /** 版本号 */
980
- version = "2024.11.6";
1015
+ version = "2024.12.3";
981
1016
  attr(element, attrName, attrValue) {
982
1017
  let DOMUtilsContext = this;
983
1018
  if (typeof element === "string") {