diff --git a/Tests/LibWeb/Text/expected/DOM/Range-deleteContents.txt b/Tests/LibWeb/Text/expected/DOM/Range-deleteContents.txt
new file mode 100644
index 00000000000..f238bad6799
--- /dev/null
+++ b/Tests/LibWeb/Text/expected/DOM/Range-deleteContents.txt
@@ -0,0 +1 @@
+before after
diff --git a/Tests/LibWeb/Text/input/DOM/Range-deleteContents.html b/Tests/LibWeb/Text/input/DOM/Range-deleteContents.html
new file mode 100644
index 00000000000..d2ff71d2ee6
--- /dev/null
+++ b/Tests/LibWeb/Text/input/DOM/Range-deleteContents.html
@@ -0,0 +1,17 @@
+
+before
+
+after
+
+
diff --git a/Userland/Libraries/LibWeb/DOM/Range.cpp b/Userland/Libraries/LibWeb/DOM/Range.cpp
index 49d49f1c41f..4be85f536ff 100644
--- a/Userland/Libraries/LibWeb/DOM/Range.cpp
+++ b/Userland/Libraries/LibWeb/DOM/Range.cpp
@@ -1118,7 +1118,7 @@ WebIDL::ExceptionOr Range::delete_contents()
// 4. Let nodes to remove be a list of all the nodes that are contained in this, in tree order, omitting any node whose parent is also contained in this.
JS::MarkedVector nodes_to_remove(heap());
- for (Node const* node = start_container(); node != end_container()->next_in_pre_order(); node = node->next_in_pre_order()) {
+ for (Node const* node = start_container(); node != end_container()->next_sibling(); node = node->next_in_pre_order()) {
if (contains_node(*node) && (!node->parent_node() || !contains_node(*node->parent_node())))
nodes_to_remove.append(const_cast(node));
}