diff --git a/.changeset/light-boxes-cough.md b/.changeset/light-boxes-cough.md
new file mode 100644
index 000000000..2ec1ddefc
--- /dev/null
+++ b/.changeset/light-boxes-cough.md
@@ -0,0 +1,5 @@
+---
+"@solid-primitives/selection": patch
+---
+
+fix: selection contenteditable node detection
diff --git a/packages/selection/dev/index.tsx b/packages/selection/dev/index.tsx
index be733c061..5ce34e69b 100644
--- a/packages/selection/dev/index.tsx
+++ b/packages/selection/dev/index.tsx
@@ -34,6 +34,11 @@ const App: Component = () => {
t
e
st
+
+ - first item
+ - second item
+ - third item
+
diff --git a/packages/selection/src/index.ts b/packages/selection/src/index.ts
index d6a792039..15a1112ed 100644
--- a/packages/selection/src/index.ts
+++ b/packages/selection/src/index.ts
@@ -17,7 +17,7 @@ export const getTextNodes = (startNode: Node) => {
const addNodeLength = (length: number, node: Node) => length + (node as Text).data.length;
const getRangePos = (container: Node, offset: number, texts: Node[]) => {
- const index = texts.indexOf(container);
+ const index = texts.findIndex((text) => text === container || text.parentElement === container);
return index === -1 ? NaN : texts.slice(0, index).reduce(addNodeLength, 0) + offset;
};