|
24 | 24 | #include <LibWeb/DOM/ElementFactory.h>
|
25 | 25 | #include <LibWeb/DOM/Event.h>
|
26 | 26 | #include <LibWeb/DOM/ExceptionOr.h>
|
| 27 | +#include <LibWeb/DOM/HTMLCollection.h> |
27 | 28 | #include <LibWeb/DOM/Range.h>
|
28 | 29 | #include <LibWeb/DOM/ShadowRoot.h>
|
29 | 30 | #include <LibWeb/DOM/Text.h>
|
@@ -484,42 +485,29 @@ void Document::set_hovered_node(Node* node)
|
484 | 485 | invalidate_style();
|
485 | 486 | }
|
486 | 487 |
|
487 |
| -NonnullRefPtrVector<Element> Document::get_elements_by_name(const String& name) const |
| 488 | +NonnullRefPtr<HTMLCollection> Document::get_elements_by_name(String const& name) |
488 | 489 | {
|
489 |
| - NonnullRefPtrVector<Element> elements; |
490 |
| - for_each_in_inclusive_subtree_of_type<Element>([&](auto& element) { |
491 |
| - if (element.attribute(HTML::AttributeNames::name) == name) |
492 |
| - elements.append(element); |
493 |
| - return IterationDecision::Continue; |
| 490 | + return HTMLCollection::create(*this, [name](Element const& element) { |
| 491 | + return element.name() == name; |
494 | 492 | });
|
495 |
| - return elements; |
496 | 493 | }
|
497 | 494 |
|
498 |
| -NonnullRefPtrVector<Element> Document::get_elements_by_tag_name(const FlyString& tag_name) const |
| 495 | +NonnullRefPtr<HTMLCollection> Document::get_elements_by_tag_name(FlyString const& tag_name) |
499 | 496 | {
|
500 | 497 | // FIXME: Support "*" for tag_name
|
501 | 498 | // https://dom.spec.whatwg.org/#concept-getelementsbytagname
|
502 |
| - NonnullRefPtrVector<Element> elements; |
503 |
| - for_each_in_inclusive_subtree_of_type<Element>([&](auto& element) { |
504 |
| - if (element.namespace_() == Namespace::HTML |
505 |
| - ? element.local_name().to_lowercase() == tag_name.to_lowercase() |
506 |
| - : element.local_name() == tag_name) { |
507 |
| - elements.append(element); |
508 |
| - } |
509 |
| - return IterationDecision::Continue; |
| 499 | + return HTMLCollection::create(*this, [tag_name](Element const& element) { |
| 500 | + if (element.namespace_() == Namespace::HTML) |
| 501 | + return element.local_name().to_lowercase() == tag_name.to_lowercase(); |
| 502 | + return element.local_name() == tag_name; |
510 | 503 | });
|
511 |
| - return elements; |
512 | 504 | }
|
513 | 505 |
|
514 |
| -NonnullRefPtrVector<Element> Document::get_elements_by_class_name(const FlyString& class_name) const |
| 506 | +NonnullRefPtr<HTMLCollection> Document::get_elements_by_class_name(FlyString const& class_name) |
515 | 507 | {
|
516 |
| - NonnullRefPtrVector<Element> elements; |
517 |
| - for_each_in_inclusive_subtree_of_type<Element>([&](auto& element) { |
518 |
| - if (element.has_class(class_name, in_quirks_mode() ? CaseSensitivity::CaseInsensitive : CaseSensitivity::CaseSensitive)) |
519 |
| - elements.append(element); |
520 |
| - return IterationDecision::Continue; |
| 508 | + return HTMLCollection::create(*this, [class_name, quirks_mode = document().in_quirks_mode()](Element const& element) { |
| 509 | + return element.has_class(class_name, quirks_mode ? CaseSensitivity::CaseInsensitive : CaseSensitivity::CaseSensitive); |
521 | 510 | });
|
522 |
| - return elements; |
523 | 511 | }
|
524 | 512 |
|
525 | 513 | Color Document::link_color() const
|
|
0 commit comments