Mojo::DOM::CSS - CSS selector engine
use Mojo::DOM::CSS; # Select elements from DOM tree my $css = Mojo::DOM::CSS->new(tree => $tree); my $elements = $css->select('h1, h2, h3');
Mojo::DOM::CSS is the CSS selector engine used by Mojo::DOM, based on the HTML Living Standard and Selectors Level 3.
All CSS selectors that make sense for a standalone parser are supported.
Any element.
my $all = $css->select('*');
An element of type E.
E
my $title = $css->select('title');
An E element with a foo attribute.
foo
my $links = $css->select('a[href]');
An E element whose foo attribute value is exactly equal to bar.
bar
my $case_sensitive = $css->select('input[type="hidden"]'); my $case_sensitive = $css->select('input[type=hidden]');
An E element whose foo attribute value is exactly equal to any (ASCII-range) case-permutation of bar. Note that this selector is EXPERIMENTAL and might change without warning!
my $case_insensitive = $css->select('input[type="hidden" i]'); my $case_insensitive = $css->select('input[type=hidden i]'); my $case_insensitive = $css->select('input[class~="foo" i]');
This selector is part of Selectors Level 4, which is still a work in progress.
An E element whose foo attribute value is a list of whitespace-separated values, one of which is exactly equal to bar.
my $foo = $css->select('input[class~="foo"]'); my $foo = $css->select('input[class~=foo]');
An E element whose foo attribute value begins exactly with the string bar.
my $begins_with = $css->select('input[name^="f"]'); my $begins_with = $css->select('input[name^=f]');
An E element whose foo attribute value ends exactly with the string bar.
my $ends_with = $css->select('input[name$="o"]'); my $ends_with = $css->select('input[name$=o]');
An E element whose foo attribute value contains the substring bar.
my $contains = $css->select('input[name*="fo"]'); my $contains = $css->select('input[name*=fo]');
An E element, root of the document.
my $root = $css->select(':root');
An E element, the n-th child of its parent.
n-th
my $third = $css->select('div:nth-child(3)'); my $odd = $css->select('div:nth-child(odd)'); my $even = $css->select('div:nth-child(even)'); my $top3 = $css->select('div:nth-child(-n+3)');
An E element, the n-th child of its parent, counting from the last one.
my $third = $css->select('div:nth-last-child(3)'); my $odd = $css->select('div:nth-last-child(odd)'); my $even = $css->select('div:nth-last-child(even)'); my $bottom3 = $css->select('div:nth-last-child(-n+3)');
An E element, the n-th sibling of its type.
my $third = $css->select('div:nth-of-type(3)'); my $odd = $css->select('div:nth-of-type(odd)'); my $even = $css->select('div:nth-of-type(even)'); my $top3 = $css->select('div:nth-of-type(-n+3)');
An E element, the n-th sibling of its type, counting from the last one.
my $third = $css->select('div:nth-last-of-type(3)'); my $odd = $css->select('div:nth-last-of-type(odd)'); my $even = $css->select('div:nth-last-of-type(even)'); my $bottom3 = $css->select('div:nth-last-of-type(-n+3)');
An E element, first child of its parent.
my $first = $css->select('div p:first-child');
An E element, last child of its parent.
my $last = $css->select('div p:last-child');
An E element, first sibling of its type.
my $first = $css->select('div p:first-of-type');
An E element, last sibling of its type.
my $last = $css->select('div p:last-of-type');
An E element, only child of its parent.
my $lonely = $css->select('div p:only-child');
An E element, only sibling of its type.
my $lonely = $css->select('div p:only-of-type');
An E element that has no children (including text nodes).
my $empty = $css->select(':empty');
A user interface element E which is checked (for instance a radio-button or checkbox).
my $input = $css->select(':checked');
An E element whose class is "warning".
my $warning = $css->select('div.warning');
An E element with ID equal to "myid".
ID
my $foo = $css->select('div#foo');
An E element that does not match simple selector s.
s
my $others = $css->select('div p:not(:first-child)');
An F element descendant of an E element.
F
my $headlines = $css->select('div h1');
An F element child of an E element.
my $headlines = $css->select('html > body > div > h1');
An F element immediately preceded by an E element.
my $second = $css->select('h1 + h2');
An F element preceded by an E element.
my $second = $css->select('h1 ~ h2');
Elements of type E, F and G.
G
my $headlines = $css->select('h1, h2, h3');
An E element whose attributes match all following attribute selectors.
my $links = $css->select('a[foo^=b][foo$=ar]');
Mojo::DOM::CSS implements the following attributes.
my $tree = $css->tree; $css = $css->tree(['root']);
Document Object Model. Note that this structure should only be used very carefully since it is very dynamic.
Mojo::DOM::CSS inherits all methods from Mojo::Base and implements the following new ones.
my $bool = $css->matches('head > title');
Check if first node in "tree" matches the CSS selector.
my $results = $css->select('head > title');
Run CSS selector against "tree".
my $result = $css->select_one('head > title');
Run CSS selector against "tree" and stop as soon as the first node matched.
Mojolicious, Mojolicious::Guides, http://mojolicious.org.
To install Mojolicious, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Mojolicious
CPAN shell
perl -MCPAN -e shell install Mojolicious
For more information on module installation, please visit the detailed CPAN module installation guide.