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