diff --git a/src/client/theme-default/components/VPSkipLink.vue b/src/client/theme-default/components/VPSkipLink.vue index ad56622d4a28..1ca0c45734ea 100644 --- a/src/client/theme-default/components/VPSkipLink.vue +++ b/src/client/theme-default/components/VPSkipLink.vue @@ -10,18 +10,22 @@ const backToTop = ref() watch(() => route.path, () => backToTop.value.focus()) function focusOnTargetAnchor({ target }: Event) { - const el = document.getElementById( + const targetEl = document.getElementById( decodeURIComponent((target as HTMLAnchorElement).hash).slice(1) ) + const el = targetEl?.querySelector('main h1[id][tabindex="-1"]') ?? targetEl + if (el) { - const removeTabIndex = () => { - el.removeAttribute('tabindex') - el.removeEventListener('blur', removeTabIndex) - } + if (!el.hasAttribute('tabindex')) { + const removeTabIndex = () => { + el.removeAttribute('tabindex') + el.removeEventListener('blur', removeTabIndex) + } - el.setAttribute('tabindex', '-1') - el.addEventListener('blur', removeTabIndex) + el.setAttribute('tabindex', '-1') + el.addEventListener('blur', removeTabIndex) + } el.focus() window.scrollTo(0, 0) } @@ -41,6 +45,7 @@ function focusOnTargetAnchor({ target }: Event) {