Meeseeks v0.9.1 Meeseeks.CSS

Compile CSS selector syntax into Meeseeks.Selectors.

Supported Syntax

Pattern Example Notes
Basic Selectors --- ---
* * Matches any for ns or tag
tag div
ns|tag <foo:div>
#id div#bar, #bar
.class div.baz, .baz
[attr] a[href], [lang]
[^attrPrefix] div[^data-]
[attr=val] a[rel="nofollow"]
[attr~=valIncludes] div[things~=thing1]
[attr|=valDash] p[lang|=en]
[attr^=valPrefix] a[href^=https:]
[attr$=valSuffix] img[src$=".png"]
[attr*=valContaining] a[href*=admin]
Pseudo Classes --- ---
:first-child li:first-child
:first-of-type li:first-of-type
:last-child tr:last-child
:last-of-type tr:last-of-type
:not not(p:nth-child(even)) Selectors cannot contain combinators or the not pseudo class
:nth-child(n) p:nth-child(even) Supports even, odd, 1.., or an+b formulas
:nth-last-child(n) p:nth-last-child(2) Supports even, odd, 1.., or an+b formulas
:nth-last-of-type(n) p:nth-last-of-type(2n+1) Supports even, odd, 1.., or an+b formulas
:nth-of-type(n) p:nth-of-type(1) Supports even, odd, 1.., or an+b formulas
Combinators --- ---
X Y div.header .logo Y descendant of X
X > Y ol > li Y child of X
X + Y div + p Y is sibling directly after X
X ~ Y div ~ p Y is any sibling after X
X, Y, Z button.standard, button.alert Matches X, Y, or Z

Examples

iex> import Meeseeks.CSS
iex> css("a[href^=\"https://\"]")
%Meeseeks.Selector.Element{
  combinator: nil,
  selectors: [
    %Meeseeks.Selector.Element.Tag{value: "a"},
    %Meeseeks.Selector.Element.Attribute.ValuePrefix{
      attribute: "href",
      value: "https://"}]}
iex> css("ul, ol")
[%Meeseeks.Selector.Element{
    combinator: nil,
    selectors: [%Meeseeks.Selector.Element.Tag{value: "ul"}]},
 %Meeseeks.Selector.Element{
   combinator: nil,
   selectors: [%Meeseeks.Selector.Element.Tag{value: "ol"}]}]

Summary

Functions

Compiles a string representing CSS selector syntax into one or more Meeseeks.Selectors

Functions

css(string) (macro)

Compiles a string representing CSS selector syntax into one or more Meeseeks.Selectors.

When the string is static this work will be done during Elixir's compilation, but if the string interpolates values the work will occur at runtime.