diff --git a/Userland/Libraries/LibWeb/HTML/Navigable.cpp b/Userland/Libraries/LibWeb/HTML/Navigable.cpp
index 006fe0719d..5cb11fd16d 100644
--- a/Userland/Libraries/LibWeb/HTML/Navigable.cpp
+++ b/Userland/Libraries/LibWeb/HTML/Navigable.cpp
@@ -28,6 +28,18 @@ static HashTable& all_navigables()
return set;
}
+// https://html.spec.whatwg.org/multipage/document-sequences.html#child-navigable
+Vector> Navigable::child_navigables() const
+{
+ Vector> results;
+ for (auto& entry : all_navigables()) {
+ if (entry->parent() == this)
+ results.append(entry);
+ }
+
+ return results;
+}
+
Navigable::Navigable()
{
all_navigables().set(this);
diff --git a/Userland/Libraries/LibWeb/HTML/Navigable.h b/Userland/Libraries/LibWeb/HTML/Navigable.h
index 7a57939cfe..10e853ebd3 100644
--- a/Userland/Libraries/LibWeb/HTML/Navigable.h
+++ b/Userland/Libraries/LibWeb/HTML/Navigable.h
@@ -29,6 +29,8 @@ public:
ErrorOr initialize_navigable(JS::NonnullGCPtr document_state, JS::GCPtr parent);
+ Vector> child_navigables() const;
+
String const& id() const { return m_id; };
JS::GCPtr parent() const { return m_parent; };