diff --git a/.changeset/chatty-mice-tan.md b/.changeset/chatty-mice-tan.md new file mode 100644 index 000000000000..49e6b85ceb0c --- /dev/null +++ b/.changeset/chatty-mice-tan.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': minor +--- + +Checks that element is not null before reading getAttribute diff --git a/packages/kit/src/runtime/client/utils.js b/packages/kit/src/runtime/client/utils.js index 8cdd0146f128..7f953d1f4dbd 100644 --- a/packages/kit/src/runtime/client/utils.js +++ b/packages/kit/src/runtime/client/utils.js @@ -153,7 +153,7 @@ export function get_router_options(element) { /** @type {Element} */ let el = element; - while (el !== document.documentElement) { + while (el && el !== document.documentElement) { if (preload_code === null) preload_code = link_option(el, 'preload-code'); if (preload_data === null) preload_data = link_option(el, 'preload-data'); if (noscroll === null) noscroll = link_option(el, 'noscroll'); diff --git a/packages/kit/test/apps/basics/src/routes/interactivity/toggle-element/+page.svelte b/packages/kit/test/apps/basics/src/routes/interactivity/toggle-element/+page.svelte index 449acb98612c..cc0dcf6b0606 100644 --- a/packages/kit/test/apps/basics/src/routes/interactivity/toggle-element/+page.svelte +++ b/packages/kit/test/apps/basics/src/routes/interactivity/toggle-element/+page.svelte @@ -8,6 +8,8 @@ {#if visible} + remove {:else} + add {/if} diff --git a/packages/kit/test/apps/basics/test/client.test.js b/packages/kit/test/apps/basics/test/client.test.js index ed5270f285dc..b81213171568 100644 --- a/packages/kit/test/apps/basics/test/client.test.js +++ b/packages/kit/test/apps/basics/test/client.test.js @@ -1200,6 +1200,10 @@ test.describe('Interactivity', () => { await page.click('button'); expect(await page.textContent('button')).toBe('add'); + expect(await page.textContent('a')).toBe('add'); + + await page.click('a'); + expect(await page.textContent('a')).toBe('remove'); expect(errored).toBe(false); });