@whitesev/domutils 1.4.7 → 1.4.8

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
@@ -264,44 +264,45 @@ class DOMUtilsEvent {
264
264
  * @param event
265
265
  */
266
266
  function domUtilsEventCallBack(event) {
267
- let eventTarget = listenerOption.isComposedPath
268
- ? event.composedPath()[0]
269
- : event.target;
270
267
  if (selectorList.length) {
271
268
  /* 存在子元素选择器 */
269
+ // 这时候的this和target都是子元素选择器的元素
270
+ let eventTarget = listenerOption.isComposedPath
271
+ ? event.composedPath()[0]
272
+ : event.target;
272
273
  let totalParent = DOMUtilsCommonUtils.isWin(elementItem)
273
274
  ? DOMUtilsContext.windowApi.document.documentElement
274
275
  : elementItem;
275
- for (let index = 0; index < selectorList.length; index++) {
276
- const selectorItem = selectorList[index];
276
+ let findValue = selectorList.find((selectorItem) => {
277
+ // 判断目标元素是否匹配选择器
277
278
  if (eventTarget.matches(selectorItem)) {
278
279
  /* 当前目标可以被selector所匹配到 */
279
- listenerCallBack.call(eventTarget, event, eventTarget);
280
- checkOptionOnceToRemoveEventListener();
281
- break;
280
+ return true;
282
281
  }
283
- else {
284
- /* 在上层与主元素之间寻找可以被selector所匹配到的 */
285
- let $closestMatches = eventTarget.closest(selectorItem);
286
- if ($closestMatches && totalParent.contains($closestMatches)) {
287
- /* event的target值不能直接修改 */
288
- // 这里尝试使用defineProperty修改event的target值
289
- try {
290
- OriginPrototype.Object.defineProperty(event, "target", {
291
- get() {
292
- return $closestMatches;
293
- },
294
- });
295
- }
296
- catch (error) { }
297
- listenerCallBack.call($closestMatches, event, $closestMatches);
298
- checkOptionOnceToRemoveEventListener();
299
- break;
300
- }
282
+ /* 在上层与主元素之间寻找可以被selector所匹配到的 */
283
+ let $closestMatches = eventTarget.closest(selectorItem);
284
+ if ($closestMatches && totalParent.contains($closestMatches)) {
285
+ eventTarget = $closestMatches;
286
+ return true;
301
287
  }
288
+ return false;
289
+ });
290
+ if (findValue) {
291
+ // 这里尝试使用defineProperty修改event的target值
292
+ try {
293
+ OriginPrototype.Object.defineProperty(event, "target", {
294
+ get() {
295
+ return eventTarget;
296
+ },
297
+ });
298
+ }
299
+ catch (error) { }
300
+ listenerCallBack.call(eventTarget, event, eventTarget);
301
+ checkOptionOnceToRemoveEventListener();
302
302
  }
303
303
  }
304
304
  else {
305
+ // 这时候的this指向监听的元素
305
306
  listenerCallBack.call(elementItem, event);
306
307
  checkOptionOnceToRemoveEventListener();
307
308
  }