webforge / dom
一个非常非常非常非常简单的在 PHP 中构建类似 jQuery 的 API(用于 HTML 测试)的方法
1.0.1
2014-05-05 13:23 UTC
Requires
- symfony/css-selector: >=2.4
- webforge/collections: >=1
Requires (Dev)
- webforge/testplate: >=1
This package is auto-updated.
Last update: 2024-09-07 01:58:27 UTC
README
一个非常非常非常非常简单的在 PHP 中构建类似 jQuery 的 API(用于 HTML 测试)的方法。它为 PHP 中的 DOM*** 类提供了一些辅助功能(这些类之前很难调试)。
使用 symfony CSSSelector 类
安装
使用 Composer 安装。
composer require -v --prefer-source webforge/dom:1.0.*
运行测试使用
phpunit
用法
假设,我们正在操作这个 HTML
<h1>Please Login</h1> <form class="main" action="" method="POST"> <fieldset class="user-data group"> <input type="text" name="email" value="" /><br /> <br /> <input type="text" name="name" value="" /><br /> </fieldset> <fieldset class="password group"> Bitte geben sie ein Passwort ein:<br /> <input type="password" name="pw1" value="" /><br /> Bitte bestätigen sie das Passwort:<br /> <input type="password" name="pw2" value="" /><br /> </fieldset> <input type="hidden" name="submitted" value="true" /> <input type="submit"> </form> <p class="pw-reset"><a href="/forgotten">Reset your password</a></p>
$hiddenInput = Query::create('form.main', $this->html)->find('input[name="submitted"]'); // returns an instanceof Query with the html: <input type="hidden" name="submitted" value="true" />
$fieldsetUserData = Query::create('form.main', $this->html)->find('fieldset')->eq(0);
返回一个包含 html 的 Query 实例:<fieldset class="user-data group"><input .. <br /><input ..<br /></fieldset>
$url = Query::create('a', '<a href="http://www.ps-webforge.com" class="def"></a>')->attr('href'); // 'http://www.ps-webforge.com'
类似于 jQuery 的 attr
$innerHtml = Query::create('fieldset:first', $this->html)->html(); // '<input type="text" name="email" value="" /><br /><br /><input type="text" name="name" value="" /><br />'
返回所有子元素的 HTML 组合。
$html = Query::create('fieldset:first [name="email"]', $this->html)->outerHtml(); // '<input type="text" name="email" value="" />'
返回元素及其所有子元素的 HTML 组合。
注意:outerHtml() 和 html() 的输出与原始 HTML 中的部分不完全相同,因为它们被 PHP-DOM 函数内部重新格式化。
$true = Query::create('fieldset:first', $this->html)->hasClass('user-data');
$true = Query::create('fieldset:first', $this->html)->hasClass('group');
$false = Query::create('fieldset:first', $this->html)->hasClass('user-data.group');
检查元素是否具有特定的单个类。
问题
- 选择器如
something:eq(0)
的行为与 jQuery 不完全相同。目前它被重写为 :nth-of-type(0)。但这并不完全一样 - 目前无法在匹配的元素集合上执行 find() 操作(PR 欢迎贡献)
- hasClass 无法与组合类如
user-data.group
一起使用