From 757bd81ea409e23ca1d22e23207b49d1a927cf45 Mon Sep 17 00:00:00 2001 From: "songji.zeng" Date: Tue, 27 May 2025 17:31:07 +0800 Subject: [PATCH] fixes a potential `TypeError: this.element.contains is not a function` error in `ElementObserver` --- src/core/binding.ts | 6 +++++- src/mutation-observers/element_observer.ts | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/core/binding.ts b/src/core/binding.ts index 33958667..25330a9e 100644 --- a/src/core/binding.ts +++ b/src/core/binding.ts @@ -96,13 +96,17 @@ export class Binding { if (this.element === eventTarget) { return true - } else if (eventTarget instanceof Element && this.element.contains(eventTarget)) { + } else if (eventTarget instanceof Element && this.containsElement(eventTarget)) { return this.scope.containsElement(eventTarget) } else { return this.scope.containsElement(this.action.element) } } + private containsElement(element: Element): boolean { + return HTMLElement.prototype.contains.call(this.element, element) + } + private get controller(): Controller { return this.context.controller } diff --git a/src/mutation-observers/element_observer.ts b/src/mutation-observers/element_observer.ts index 544de6e4..a23e6581 100644 --- a/src/mutation-observers/element_observer.ts +++ b/src/mutation-observers/element_observer.ts @@ -146,7 +146,7 @@ export class ElementObserver { if (element.isConnected != this.element.isConnected) { return false } else { - return this.element.contains(element) + return this.containsElement(element) } } @@ -171,4 +171,8 @@ export class ElementObserver { } } } + + private containsElement(element: Element): boolean { + return HTMLElement.prototype.contains.call(this.element, element) + } }