@@Felix Riesterer
Aber auch das benötigt man nicht, wenn man event delegation einsetzt:
click
-Eventhandler fürbody
, darin prüfen, ob der Auslöser (event.target
) von einem Link stammt.diese Dogmen stören mich.
??
Natürlich dachte ich für mich an einen zentralen
click
-Handler. Aber was tue ich mit dem? Ich prüfe, obevent.target
eines aus einer Liste ist, für die ich diesen Effekt haben möchte.
Warum das? Zu prüfen, ob das event.target
bestimmten Bedingungen genügt, dürfte performanter sein als zu prüfen, ob es in einer Liste (collection) vorkommt.
if (event.target.nodeName === 'A')
vs.
if (document.links.includes(event.target))
Diese Liste erstelle ich mir mit einem
querySelector
, weil ich vielleicht nicht pauschal alle Elemente vondocument.links
haben will.
Auch dafür brauchst du keine Liste zu erstellen:
if (event.target.nodeName === 'A' && event.target.classList.contains('foo'))
oder einfacher
if (event.target.matches('a.foo'))
vs.
if (document.querySelectorAll('a.foo').includes(event.target))
(document.querySelectorAll('a.foo')
sollte dann natürlich außerhalb des Eventhandlers erledigt und in einer Variablen festgehalten werden. Der Punkt ist aber, dass man diese collection gar nicht braucht.)
Eben. Vielleicht will ich nur Links mit diesem Effekt ausstatten, die von meiner Domain hinweg führen, oder eben gerade anders herum, nur diejenigen Links, die weiterhin auf meine Domain verweisen.
if (event.target.matches('a[href*="example.net"]'))
bzw.
if (event.target.matches('a:not([href*="example.net"])'))
Das alles funktioniert nur, wenn im a-
Element kein weiteres Markup vorkommt (wovon man nicht ausgehen sollte).
Wenn man in diesem Beispiel auf gelobte Land clickt, kommt B raus, nicht A.
Man mus sich also erstmal von event.target
zum a
-Element hochhangeln:
const anchor = event.target.closest('a');
if (anchor?.matches(':not([href*="example.net"])')) {…}
😷 LLAP
“When I was 5 years old, my mother always told me that happiness was the key to life. When I went to school, they asked me what I wanted to be when I grew up. I wrote down ‘happy.’ They told me I didn’t understand the assignment, and I told them they didn’t understand life.” —John Lennon