berlioz / html-selector
Berlioz HTML Selector 是一个用于在 HTML 文件(转换为 SimpleXMLElement 对象)上执行查询的 PHP 库,类似于 jQuery 在 DOM 上的操作。
v2.0.4
2023-01-04 08:52 UTC
Requires
- php: ^8.0
- ext-dom: *
- ext-libxml: *
- ext-mbstring: *
- ext-simplexml: *
- psr/http-message: ^1.0
Requires (Dev)
- berlioz/http-message: ^1.0
- phpunit/phpunit: ^9.3
This package is auto-updated.
Last update: 2024-09-04 12:22:14 UTC
README
Berlioz HTML Selector 是一个用于使用 CSS 选择器在 HTML 文件上执行查询的 PHP 库,类似于在 DOM 上使用 jQuery。
安装
Composer
您可以使用 Composer 安装 Berlioz HTML Selector,这是推荐的安装方法。
$ composer require berlioz/html-selector
依赖项
- PHP ^8.0
- PHP 库
- dom
- libxml
- mbstring
- simplexml
用法
加载 HTML
您可以使用静态函数 HtmlSelector::query()
轻松加载 HTML 字符串或文件。对于文件,请使用方法的第二个参数 contentsIsFile
。
$htmlSelector = new \Berlioz\HtmlSelector\HtmlSelector(); $query = $htmlSelector->query('<html><body>...</body></html>'); $query = $htmlSelector->query('path-of-my-file/file.html', contentsIsFile: true); $query = $htmlSelector->query(new SimpleXMLElement(/*...*/));
从 ResponseInterface
加载
HtmlSelector::queryFromResponse()
允许从响应体中加载 HTML。
$htmlSelector = new \Berlioz\HtmlSelector\HtmlSelector(); /** @var \Psr\Http\Message\ResponseInterface $response */ $query = $htmlSelector->queryFromResponse($response);
执行查询
使用选择器查询 HTML 字符串非常简单,类似于 jQuery。
/** @var \Berlioz\HtmlSelector\Query\Query $query */ $query = $query->find('body > .wrapper h2'); $query = $query->filter(':first');
选择器
CSS 简单选择器
- type:选择具有其类型的元素。
- #id:选择具有其 ID 的元素。
- .class:选择具有其类的元素。
- 属性选择。
- [attribute]:具有 'attribute' 属性。
- [attribute=foo]:属性值等于 'foo'。
- [attribute^=foo]:属性值以 'foo' 开头。
- [attribute$=foo]:属性值以 'foo' 结尾。
- [attribute=foo]*:属性值包含 'foo'。
- [attribute!=foo]:属性值不同于 'foo'。
- [attribute~=foo]:属性值包含单词 'foo'。
- [attribute|=foo]:属性值包含前缀 'foo'。
CSS 父代、子代、兄弟选择器
- selector selector 或 selector >> selector:所有后代选择器。
- selector > selector:直接子代选择器(仅子元素)。
- selector ~ selector:兄弟选择器。
- selector, selector:多选择器。
CSS 伪类
- :any(selector, selector):仅选择给定参数中的元素。
- :any-link:仅选择具有
[href]
属性的<a>
、<area>
和<link>
元素。 - :blank:仅选择没有子元素且没有文本(除空格外)的元素。
- :checked:仅选择具有
[checked]
属性的元素。 - :dir:仅选择具有给定方向文本的元素(默认:ltr)。
- :disabled:仅选择具有
[disabled]
属性的<button>
、<input>
、<optgroup>
、<select>
或<textarea>
元素。 - :empty:仅选择没有子元素的元素。
- :enabled:仅选择没有
[disabled]
属性的<button>
、<input>
、<optgroup>
、<option>
、<select>
、<textarea>
、<menuitem>
或<fieldset>
元素。 - :first:仅选择完整选择结果中的第一个结果。
- :first-child:仅选择其父元素中的第一个子元素。
- :first-of-type:仅选择其父元素中的第一个类型。
- :has(selector, selector):仅选择具有有效子选择器的元素。
- :lang(x): 仅具有属性
[lang]
且以给定值开头或等于给定值的元素。 - :last-child: 仅指父母中的最后一个子元素。
- :last-of-type: 仅指父母中的最后一个指定类型的子元素。
- :not(selector, selector): 过滤 'not'。
- :nth-child(): 选择器结果中的第 n 个元素。
- :nth-last-child(): 选择器结果中的第 n 个元素,从列表末尾开始。
- :nth-of-type(): 选择器结果中第 n 个指定类型的元素。
- :nth-last-of-type(): 选择器结果中第 n 个指定类型的元素,从列表末尾开始。
- :only-child: 仅指父母中唯一的子元素。
- :only-of-type: 仅指父母中唯一类型的子元素。
- :optional(): 仅指没有
[required]
属性的输入元素。 - :read-only(): 仅指用户无法编辑的元素。
- :read-write(): 仅指具有可编辑属性的元素。
- :required(): 仅指具有
[required]
属性的元素。 - :root(): 获取根元素。
来自 jQuery 库的额外 CSS 伪类(不在 CSS 规范中)
- :button: 仅指没有属性值
[type=submit]
或<input type="button">
的<button>
元素。 - :checkbox: 仅指具有属性
[type=checkbox]
的元素。 - :contains(x): 仅指包含给定文本的元素。
- :eq(x): 仅指给定索引的结果(索引从 0 开始)。
- :even: 仅指选择中的偶数结果。
- :file: 仅指具有属性
[type=file]
的元素。 - :gt(x): 仅指索引大于给定索引的结果(索引从 0 开始)。
- :gte: 仅指索引大于或等于给定索引的结果(索引从 0 开始)。
- :header: 仅指标题元素,如
<h1>
、<h2>
... - :image: 仅指具有属性
[type=image]
的元素。 - :input: 仅指类型为
<input>
、<textarea>
、<select>
或<button>
的元素。 - :last: 仅指完整选择中的最后一个结果。
- :lt: 仅指索引小于给定索引的结果(索引从 0 开始)。
- :lte: 仅指索引小于或等于给定索引的结果(索引从 0 开始)。
- :odd: 仅指选择中的奇数结果。
- :parent: 仅指有一个或多个子元素的元素。
- :password: 仅指具有属性
[type=password]
的元素。 - :radio: 仅指具有属性
[type=radio]
的元素。 - :reset: 仅指具有属性
[type=reset]
的元素。 - :selected: 仅指具有属性
[selected]
的类型为<option>
的元素。 - :submit: 仅指类型为
<button>
或<input>
且具有属性[type=submit]
的元素。 - :text: 仅指类型为
<input>
且具有属性[type=text]
或没有[type]
属性的元素。
额外的 CSS 伪类(不在 CSS 规范中)
- :count(x): 仅指在父元素中是第 x 个子元素的元素,用于 :has(selector) 伪类。
选择器的完整示例
select > option:selected
div#myId.class1.class2[name1=value1][name2=value2]:even:first
函数
默认函数
某些默认函数在 Query 对象中可用,以与结果交互。这些函数应该与 jQuery 中的对应函数具有相同的结果。
- attr(name): 获取属性值
- attr(name, value): 设置属性值
- children(): 获取结果中元素的孩子。
- count(): 计算查询结果中的元素数量。
- data(nameOfData): 获取数据值(名称采用驼峰式语法,不带 'data-' 前缀)。
- filter(selector): 过滤结果中的元素。
- find(selector): 在结果中的元素中查找选择器。
- get(i): 获取结果中的 DOM 元素。
- hasClass(class_name): 确定结果中的元素是否至少有一个具有给定的类。
- html(): 获取结果中第一个元素的HTML。
- index(selector): 获取给定选择器在结果元素中的索引。
- is(selector): 判断选择器是否在结果中至少匹配一个元素。
- isset(i): 返回布尔值,表示结果中是否存在元素键。
- next(selector): 获取结果中每个元素之后的下一个元素。
- nextAll(selector): 获取结果中每个元素之后的所有后续元素。
- not(selector): 过滤结果中的元素。
- parent(): 获取当前选择结果的直接父元素。
- parents(selector): 获取当前选择结果的所有父元素。
- prev(selector): 获取结果中每个元素之前的上一个元素。
- prevAll(selector): 获取结果中每个元素之前的所有前一个元素。
- prop(name): 获取属性布尔值,例如用于
disabled
属性。 - prop(name, value): 设置属性布尔值,例如用于
disabled
属性。 - serialize(): 序列化表单的输入值。返回一个字符串。
- serializeArray(): 序列化表单的输入值。返回一个数组。
- text(): 获取每个元素的文本并连接。
- val(): 获取表单元素的值。