diff --git a/Userland/Libraries/LibWeb/CSS/Selector.cpp b/Userland/Libraries/LibWeb/CSS/Selector.cpp index 113cecb617..d88c18b186 100644 --- a/Userland/Libraries/LibWeb/CSS/Selector.cpp +++ b/Userland/Libraries/LibWeb/CSS/Selector.cpp @@ -20,6 +20,9 @@ Selector::~Selector() u32 Selector::specificity() const { + if (m_specificity.has_value()) + return *m_specificity; + unsigned ids = 0; unsigned tag_names = 0; unsigned classes = 0; @@ -42,7 +45,9 @@ u32 Selector::specificity() const } } - return ids * 0x10000 + classes * 0x100 + tag_names; + m_specificity = ids * 0x10000 + classes * 0x100 + tag_names; + + return *m_specificity; } // https://www.w3.org/TR/cssom/#serialize-a-simple-selector diff --git a/Userland/Libraries/LibWeb/CSS/Selector.h b/Userland/Libraries/LibWeb/CSS/Selector.h index 2c61358103..9cca6a0b2b 100644 --- a/Userland/Libraries/LibWeb/CSS/Selector.h +++ b/Userland/Libraries/LibWeb/CSS/Selector.h @@ -138,6 +138,7 @@ private: explicit Selector(Vector&&); Vector m_compound_selectors; + mutable Optional m_specificity; }; constexpr StringView pseudo_element_name(Selector::SimpleSelector::PseudoElement);