diff --git a/.changeset/seven-avocados-hug.md b/.changeset/seven-avocados-hug.md
new file mode 100644
index 000000000000..2e391a1a0a96
--- /dev/null
+++ b/.changeset/seven-avocados-hug.md
@@ -0,0 +1,5 @@
+---
+'@sveltejs/kit': patch
+---
+
+remove all selection before navigating to the next page
diff --git a/packages/kit/src/runtime/client/renderer.js b/packages/kit/src/runtime/client/renderer.js
index 13f60d7ac081..32a133b260eb 100644
--- a/packages/kit/src/runtime/client/renderer.js
+++ b/packages/kit/src/runtime/client/renderer.js
@@ -275,6 +275,8 @@ export class Renderer {
this._init(navigation_result);
}
+ getSelection()?.removeAllRanges();
+
if (!opts) {
await 0;
} else {
diff --git a/packages/kit/test/apps/basics/src/routes/selection/__layout.svelte b/packages/kit/test/apps/basics/src/routes/selection/__layout.svelte
new file mode 100644
index 000000000000..f182115ccad7
--- /dev/null
+++ b/packages/kit/test/apps/basics/src/routes/selection/__layout.svelte
@@ -0,0 +1,3 @@
+
+
+
diff --git a/packages/kit/test/apps/basics/src/routes/selection/_tests.js b/packages/kit/test/apps/basics/src/routes/selection/_tests.js
new file mode 100644
index 000000000000..9f67c7025172
--- /dev/null
+++ b/packages/kit/test/apps/basics/src/routes/selection/_tests.js
@@ -0,0 +1,32 @@
+import * as assert from 'uvu/assert';
+
+/** @type {import('test').TestMaker} */
+export default function (test) {
+ test('reset selection', '/selection/a', async ({ page, clicknav }) => {
+ assert.equal(
+ await page.evaluate(() => {
+ const range = document.createRange();
+ range.selectNodeContents(document.body);
+ const selection = getSelection();
+ if (selection) {
+ selection.removeAllRanges();
+ selection.addRange(range);
+ return selection.rangeCount;
+ }
+ return 0;
+ }),
+ 1
+ );
+ await clicknav('[href="/selection/b"]');
+ assert.equal(
+ await page.evaluate(() => {
+ const selection = getSelection();
+ if (selection) {
+ return selection.rangeCount;
+ }
+ return 1;
+ }),
+ 0
+ );
+ });
+}
diff --git a/packages/kit/test/apps/basics/src/routes/selection/a.svelte b/packages/kit/test/apps/basics/src/routes/selection/a.svelte
new file mode 100644
index 000000000000..349082e55b13
--- /dev/null
+++ b/packages/kit/test/apps/basics/src/routes/selection/a.svelte
@@ -0,0 +1,5 @@
+
+ a
+
+
+
a
diff --git a/packages/kit/test/apps/basics/src/routes/selection/b.svelte b/packages/kit/test/apps/basics/src/routes/selection/b.svelte
new file mode 100644
index 000000000000..f3641bd0bf0a
--- /dev/null
+++ b/packages/kit/test/apps/basics/src/routes/selection/b.svelte
@@ -0,0 +1,5 @@
+
+ b
+
+
+b