diff --git a/Userland/Libraries/LibWeb/DOM/Document.cpp b/Userland/Libraries/LibWeb/DOM/Document.cpp index e4f9ae1f47..de8102c8c5 100644 --- a/Userland/Libraries/LibWeb/DOM/Document.cpp +++ b/Userland/Libraries/LibWeb/DOM/Document.cpp @@ -32,6 +32,7 @@ #include #include #include +#include #include #include #include @@ -517,6 +518,15 @@ NonnullRefPtr Document::applets() return HTMLCollection::create(*this, [] { return false; }); } +NonnullRefPtr Document::anchors() +{ + // FIXME: This should return the same HTMLCollection object every time, + // but that would cause a reference cycle since HTMLCollection refs the root. + return HTMLCollection::create(*this, [](Element const& element) { + return is(element) && element.has_attribute(HTML::AttributeNames::name); + }); +} + Color Document::link_color() const { if (m_link_color.has_value()) diff --git a/Userland/Libraries/LibWeb/DOM/Document.h b/Userland/Libraries/LibWeb/DOM/Document.h index a470b0379b..f070ac17fd 100644 --- a/Userland/Libraries/LibWeb/DOM/Document.h +++ b/Userland/Libraries/LibWeb/DOM/Document.h @@ -141,6 +141,7 @@ public: NonnullRefPtr get_elements_by_class_name(FlyString const&); NonnullRefPtr applets(); + NonnullRefPtr anchors(); const String& source() const { return m_source; } void set_source(const String& source) { m_source = source; } diff --git a/Userland/Libraries/LibWeb/DOM/Document.idl b/Userland/Libraries/LibWeb/DOM/Document.idl index cc31659525..07b11682dd 100644 --- a/Userland/Libraries/LibWeb/DOM/Document.idl +++ b/Userland/Libraries/LibWeb/DOM/Document.idl @@ -19,6 +19,7 @@ interface Document : Node { HTMLCollection getElementsByClassName(DOMString className); readonly attribute HTMLCollection applets; + readonly attribute HTMLCollection anchors; Element createElement(DOMString tagName); Element createElementNS(DOMString? namespace, DOMString qualifiedName);