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