一个非常非常非常非常简单的在 PHP 中构建类似 jQuery 的 API(用于 HTML 测试)的方法

1.0.1 2014-05-05 13:23 UTC

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&auml;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 一起使用