From edf0aacda4452e0d0e656133b4af923d346fd78b Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Thu, 25 Jun 2020 22:23:33 +0200 Subject: [PATCH] LibWeb: Add Document.getElementsByTagName() --- Libraries/LibWeb/DOM/Document.cpp | 11 +++++++++++ Libraries/LibWeb/DOM/Document.h | 1 + Libraries/LibWeb/DOM/Document.idl | 1 + 3 files changed, 13 insertions(+) diff --git a/Libraries/LibWeb/DOM/Document.cpp b/Libraries/LibWeb/DOM/Document.cpp index e0c607d3da..4c9810f374 100644 --- a/Libraries/LibWeb/DOM/Document.cpp +++ b/Libraries/LibWeb/DOM/Document.cpp @@ -333,6 +333,17 @@ Vector Document::get_elements_by_name(const String& name) const return elements; } +NonnullRefPtrVector Document::get_elements_by_tag_name(const String& tag_name) const +{ + NonnullRefPtrVector elements; + for_each_in_subtree_of_type([&](auto& element) { + if (element.tag_name() == tag_name) + elements.append(element); + return IterationDecision::Continue; + }); + return elements; +} + RefPtr Document::query_selector(const StringView& selector_text) { auto selector = parse_selector(selector_text); diff --git a/Libraries/LibWeb/DOM/Document.h b/Libraries/LibWeb/DOM/Document.h index d106d2d6fb..ff03cd1329 100644 --- a/Libraries/LibWeb/DOM/Document.h +++ b/Libraries/LibWeb/DOM/Document.h @@ -118,6 +118,7 @@ public: void schedule_style_update(); Vector get_elements_by_name(const String&) const; + NonnullRefPtrVector get_elements_by_tag_name(const String&) const; RefPtr query_selector(const StringView&); NonnullRefPtrVector query_selector_all(const StringView&); diff --git a/Libraries/LibWeb/DOM/Document.idl b/Libraries/LibWeb/DOM/Document.idl index 59f032b216..1de360edcd 100644 --- a/Libraries/LibWeb/DOM/Document.idl +++ b/Libraries/LibWeb/DOM/Document.idl @@ -2,6 +2,7 @@ interface Document : Node { Element? getElementById(DOMString id); Element? querySelector(DOMString selectors); + ArrayFromVector getElementsByTagName(DOMString tagName); ArrayFromVector querySelectorAll(DOMString selectors); Element createElement(DOMString tagName);