mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 10:27:34 +00:00
LibWeb: Support Element.matches(selectors)
This returns whether an element matches any of a set of selectors.
This commit is contained in:
parent
439be913cf
commit
9d852623f2
3 changed files with 20 additions and 0 deletions
|
@ -9,6 +9,7 @@
|
||||||
#include <LibWeb/CSS/Parser/Parser.h>
|
#include <LibWeb/CSS/Parser/Parser.h>
|
||||||
#include <LibWeb/CSS/PropertyID.h>
|
#include <LibWeb/CSS/PropertyID.h>
|
||||||
#include <LibWeb/CSS/ResolvedCSSStyleDeclaration.h>
|
#include <LibWeb/CSS/ResolvedCSSStyleDeclaration.h>
|
||||||
|
#include <LibWeb/CSS/SelectorEngine.h>
|
||||||
#include <LibWeb/CSS/StyleInvalidator.h>
|
#include <LibWeb/CSS/StyleInvalidator.h>
|
||||||
#include <LibWeb/DOM/DOMException.h>
|
#include <LibWeb/DOM/DOMException.h>
|
||||||
#include <LibWeb/DOM/Document.h>
|
#include <LibWeb/DOM/Document.h>
|
||||||
|
@ -247,6 +248,21 @@ NonnullRefPtr<CSS::StyleProperties> Element::computed_style()
|
||||||
return properties;
|
return properties;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// https://dom.spec.whatwg.org/#dom-element-matches
|
||||||
|
DOM::ExceptionOr<bool> Element::matches(StringView selectors) const
|
||||||
|
{
|
||||||
|
auto maybe_selectors = parse_selector(CSS::ParsingContext(static_cast<ParentNode&>(const_cast<Element&>(*this))), selectors);
|
||||||
|
if (!maybe_selectors.has_value())
|
||||||
|
return DOM::SyntaxError::create("Failed to parse selector");
|
||||||
|
|
||||||
|
auto sel = maybe_selectors.value();
|
||||||
|
for (auto& s : sel) {
|
||||||
|
if (SelectorEngine::matches(s, *this))
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
ExceptionOr<void> Element::set_inner_html(String const& markup)
|
ExceptionOr<void> Element::set_inner_html(String const& markup)
|
||||||
{
|
{
|
||||||
auto result = DOMParsing::InnerHTML::inner_html_setter(*this, markup);
|
auto result = DOMParsing::InnerHTML::inner_html_setter(*this, markup);
|
||||||
|
|
|
@ -56,6 +56,8 @@ public:
|
||||||
void remove_attribute(const FlyString& name);
|
void remove_attribute(const FlyString& name);
|
||||||
size_t attribute_list_size() const { return m_attributes.size(); }
|
size_t attribute_list_size() const { return m_attributes.size(); }
|
||||||
|
|
||||||
|
DOM::ExceptionOr<bool> matches(StringView selectors) const;
|
||||||
|
|
||||||
template<typename Callback>
|
template<typename Callback>
|
||||||
void for_each_attribute(Callback callback) const
|
void for_each_attribute(Callback callback) const
|
||||||
{
|
{
|
||||||
|
|
|
@ -20,6 +20,8 @@ interface Element : Node {
|
||||||
[Reflect] attribute DOMString id;
|
[Reflect] attribute DOMString id;
|
||||||
[Reflect=class] attribute DOMString className;
|
[Reflect=class] attribute DOMString className;
|
||||||
|
|
||||||
|
boolean matches(DOMString selectors);
|
||||||
|
|
||||||
readonly attribute Element? nextElementSibling;
|
readonly attribute Element? nextElementSibling;
|
||||||
readonly attribute Element? previousElementSibling;
|
readonly attribute Element? previousElementSibling;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue