名称

Mojo::DOM::CSS-CSS选择器引擎

简介

使用Mojo::DOM::CSS;#从DOM树中选择元素my$css=Mojo::DOM::css->new(tree=>$tree);我的$elements=$css->select('h1,h2,h3');

描述

Mojo::DOM::CSS是使用的CSS选择器引擎Mojo::DOM,基于HTML生活标准选择器级别3.

选择器

支持对独立解析器有意义的所有CSS选择器。

*

任何元素。

my$all=$css->select('*');

E类

类型为的元素E类.

my$title=$css->select(“标题”);

E[foo](英语)

E类元素,带有foo公司属性。

我的$links=$css->select('a[href]');

E[foo=“bar”]

E类元素,其foo公司属性值正好等于酒吧.

我的$case_sensitive=$css->select('input[type=“hidden”]');my$case_sensitive=$css->select('input[type=hiddend]');

E[foo=“bar”i]

E类元素,其foo公司属性值正好等于酒吧。请注意,此选择器是实验而且可能会毫无征兆地改变!

my$case_insitive=$css->select('input[type=“hidden”i]');my$case_insitive=$css->select('input[type=hiddeni]');my$case_insensitive=$css->select('input[class~=“foo”i]');

此选择器是选择器级别4,这项工作仍在进行中。

E[foo=“bar”s]

E类元素,其foo公司属性值精确且区分大小写等于酒吧。请注意,此选择器是实验而且可能会毫无征兆地改变!

我的$case_sensitive=$css->select('input[type=“hidden”s]');

此选择器是选择器级别4,这项工作仍在进行中。

E[foo~=“bar”]

E类元素,其foo公司属性值是一个由空格分隔的值列表,其中一个值正好等于酒吧.

我的$foo=$css->select('input[class~=“foo”]');我的$foo=$css->select('input[class~=foo]');

E[foo^=“bar”]

E类元素,其foo公司属性值正好以字符串开头酒吧.

我的$begins_with=$css->select('input[name^=“f”]');我的$begins_with=$css->select('input[name^=f]');

E[foo$=“bar”]

E类元素,其foo公司属性值正好以字符串结尾酒吧.

my$ends_with=$css->select('input[name$=“o”]');我的$ends_with=$css->select('input[name$=o]);

E[foo*=“bar”]

E类元素,其foo公司属性值包含子字符串酒吧.

my$contains=$css->选择('input[name*=“fo”]');my$contains=$css->select('input[name*=fo]');

E[foo|=“en”]

E类元素,其foo公司属性具有以连字符分隔的值列表,这些值以.

my$english=$css->select('link[hreflang|=en]');

E: 根

E类元素,文档的根。

my$root=$css->select(':root');

E: 第n个子(n)

E类元素第n个其父级的子级。

我的第三个$=$css->select('div:nth-child(3)');我的$odd=$css->select('div:nth-child(odd)');我的$even=$css->select('div:nth-child(even)');我的$top3=$css->select('div:nth-child(-n+3)');

E: 第n个孩子(n)

E类元素第n个其父级的子级,从最后一个开始计算。

我的第三个$=$css->select('div:nth-last-child(3)');我的$odd=$css->select('div:nth-last-child(odd)');my$even=$css->选择('div:nh last child(even)');我的$bottom3=$css->select('div:nth-last-child(-n+3)');

E: 第n个类型(n)

E类元素第n个其类型的同级。

我的第三个$=$css->select('div:nth-of-type(3)');my$odd=$css->选择('div:nth of type(odd)');我的$even=$css->select('div:nth-of-type(even)');我的$top3=$css->select('div:nth-of-type(-n+3)');

E: 第n个类型(n)

E类元素第n个其类型的同级,从最后一个开始计算。

我的第三个$=$css->select('div:nth-last-of-type(3)');我的$odd=$css->select('div:nth-last-of-type(odd)');我的$even=$css->select('div:nth-last-of-type(even)');我的$bottom3=$css->select('div:nth-last-of-type(-n+3)');

E: 第一个孩子

E类元素,它的父级的第一个子级。

我的$first=$css->select('div p:第一个孩子');

E: 最后一个孩子

E类元素,它的父级的最后一个子级。

my$last=$css->select('div p:last-child');

E: 第一种类型

E类元素,它的类型的第一个同级。

my$first=$css->select('div p:first of-type');

E: 最新型号

E类元素,它的类型的最后一个同级。

my$last=$css->select('div p:last-of-type');

E: 独生子女

E类元素,其父元素的唯一子元素。

my$loney=$css->select('div p:only-child');

E: 仅限类型

E类元素,只有其类型的同级。

my$loney=$css->select('div p:only-of-type');

E: 空

E类没有子级的元素(包括文本节点)。

my$empty=$css->select(':empty');

的别名“E:链接”。请注意,此选择器是实验而且可能会毫无预警地发生变化!此选择器是选择器级别4,这项工作仍在进行中。

E类元素是尚未访问其目标的超链接的源锚点(:链接)或已访问(:已访问). 请注意Mojo::DOM::CSS因此不是有状态的:任意链接,:链接:已访问产生完全相同的结果。

my$links=$css->选择(':任意链接');我的$links=$css->select(':link');my$links=$css->select(':visited');

E: 已访问

的别名“E:链接”.

E: 范围

E类元素是指定的参考元素。请注意,此选择器是实验而且可能会毫无征兆地改变!

my$scoped=$css->select('a:not(:scope>a)');my$scoped=$css->select('div:scope p');我的$scoped=$css->select('~p');

此选择器是选择器级别4,这项工作仍在进行中。

E: 已检查

用户界面元素E类已选中(例如,单选按钮或复选框)。

我的$input=$css->select(':checked');

E.警告

E类类为“warning”的元素。

我的$warning=$css->select('div.warning');

E#我的ID

E类具有的元素身份证件等于“myid”。

我的$foo=$css->select('div#foo');

E: 不是(s1,s2)

E类与任一复合选择器都不匹配的元素第1页或复合选择器s2秒。请注意,对复合选择器的支持是实验而且可能会毫无征兆地改变!

my$others=$css->选择('div p:not(:第一个孩子,:最后一个孩子)');

添加了对复合选择器的支持,作为选择器级别4,这项工作仍在进行中。

E: 是(s1,s2)

E类与复合选择器匹配的元素第1页和/或复合选择器s2秒。请注意,此选择器是实验而且可能会毫无征兆地改变!

my$headers=$css->select(':is(section,article,aside,nav)h1');

此选择器是选择器级别4,这项工作仍在进行中。

E: 有(rs1,rs2)

E类元素,如果是其中一个相对选择器相对标准偏差1第2轮,使用进行计算时E类作为:scope元素,匹配一个元素。请注意,此选择器是实验而且可能会毫无征兆地改变!

我的$link=$css->select('a:has(>img)');

此选择器是选择器级别4,这项工作仍在进行中。还要注意,此功能当前已标记有风险,因此很有可能将其完全移除。

E: 文本(字符串或字符串)

E类包含子字符串匹配的文本内容的元素字符串或正则表达式区分大小写或正则表达式匹配字符串或正则表达式。对于正则表达式,请使用以下格式:text(/…/)。请注意,此选择器是实验而且可能会毫无征兆地改变!

#子串匹配my$login=$css->select(':text(Log in)');#Regex匹配my$login=$css->select(':text(/Log?in/)');#Regex匹配(区分大小写)my$login=$css->select(':text(/(?i:登录)/)');

这是的自定义选择器Mojo::DOM而不是任何规格的一部分。

A|E公司

E类属于命名空间别名的元素A类CSS命名空间模块级别3。传递给选择器方法的键/值对用于声明命名空间别名。

my$elem=$css->select('lq|elem',lq=>'http://example.com/q-markup');

使用空别名搜索不属于任何命名空间的元素。

我的$div=$c->select('|div');

E、F

F类元素的后代E类元素。

我的$headlines=$css->select('div h1');

E>F

F类元素的子元素E类元素。

my$headlines=$css->select('html>body>div>h1');

E+F公司

F类元素前面紧跟一个E类元素。

我的$秒=$css->select('h1+h2');

E至F

F类元素前面有E类元素。

我的$second=$css->select('h1~h2');

E、 F、G

类型的元素E类,F类G公司.

my$headlines=$css->选择('h1,h2,h3');

E[foo=bar][bar=baz]

E类元素,其属性与以下所有属性选择器匹配。

我的$links=$css->select('a[foo^=b][foo$=ar]');

属性

Mojo::DOM::CSS实现以下属性。

my$tree=$css->树;$css=$css->tree(['root']);

文档对象模型。请注意,由于此结构非常动态,因此只能非常小心地使用。

方法

Mojo::DOM::CSS从继承所有方法Mojo::基础并实现了以下新功能。

比赛

我的$bool=$css->匹配('head>title');我的$bool=$css->匹配('svg|line',svg=>'http://www.w3.org/2000/svg');

检查中的第一个节点“树”匹配CSS选择器。尾部键/值对可用于声明xml命名空间别名。

选择

我的$results=$css->select('head>title');my$results=$css->select('svg|line',svg=>'http://www.w3.org/2000/svg');

对运行CSS选择器“树”。尾部键/值对可用于声明xml命名空间别名。

选择一个

my$result=$css->select_one('head>title');我的$结果=$css->select_one('svg|line',svg=>'http://www.w3.org/2000/svg');

对运行CSS选择器“树”并在第一个节点匹配后立即停止。尾部键/值对可用于声明xml命名空间别名。

调试

您可以设置MOJO_DOM_CSS_DEBUG公司将一些高级诊断信息打印到的环境变量STDERR公司.

MOJO_DOM_CSS_DEBUG=1

另请参阅

Mojolicious公司,Mojolicious::指南,https://mojolicious.org.