phpgt / dom
现代DOM API。
v4.1.6
2023-12-31 11:26 UTC
Requires
- php: >=8.1
- ext-dom: *
- ext-libxml: *
- ext-mbstring: *
- phpgt/cssxpath: ^1.1
- phpgt/propfunc: ^1.0
- psr/http-message: ^1.0 || ^2.0
Requires (Dev)
- phpmd/phpmd: ^2.13
- phpstan/phpstan: ^1.9
- phpunit/phpunit: ^10.4
- squizlabs/php_codesniffer: ^3.7
- dev-master
- v4.1.6
- v4.1.5
- v4.1.4
- v4.1.3
- v4.1.2
- v4.1.1
- v4.1.0
- v4.0.3
- v4.0.2
- v4.0.1
- v4.0.0
- v3.0.3
- v3.0.2
- v3.0.1
- v3.0.0
- v3.0.0-RC2
- v3.0.0-RC1
- v2.2.4
- v2.2.3
- v2.2.1
- v2.2.0
- v2.1.6
- v2.1.5
- v2.1.4
- v2.1.3
- v2.1.2
- v2.1.1
- v2.1.0
- v2.0.3
- v2.0.2
- v2.0.1
- v2.0.0
- v1.1.2
- v1.1.1
- v1.1.0
- v1.0.4
- v1.0.3
- v1.0.2
- v1.0.1
- v1.0.0
- v0.4.0
- v0.3.2
- v0.3.1
- v0.3.0
- v0.2.1
- v0.2.0
- v0.1.2
- v0.1.1
- v0.1.0
- v0.0.3
- v0.0.2
- v0.0.1
- dev-test-cssxpath
- dev-allowdynamicproperties
- dev-ci-update
- dev-v2-dev
- dev-name-field-select
This package is auto-updated.
Last update: 2024-08-25 17:05:47 UTC
README
现代DOM API。
该项目基于PHP的本地 DOMDocument,提供了访问现代DOM API的接口,就像在浏览器中处理客户端代码一样。
在服务器端代码中执行DOM操作可以增强构建动态页面的方式。使用标准化的面向对象接口意味着页面可以进行预处理,从而有利于浏览器、Web服务器和内容分发网络。
示例用法:你好,你!
重要提示:这里展示的示例仅用于说明,但使用DOM直接将数据设置到元素值会紧密耦合逻辑和视图,这被认为是不良做法。请参阅DomTemplate库以获取绑定数据到DOM的更健壮的解决方案。
考虑一个带有输入元素的表单页面,用于输入你的名字。当表单提交时,页面应该用你的名字问候你。
这是一个将源HTML文件视为模板的简单示例。这可以轻松应用于更复杂的模板页面,以提供动态内容,而不需要使用非标准技术,如{{花括号}}
占位符或echo '<div class='easy-mistake'>' . $content['opa'] . '</div>'
从PHP中构建易于出错的HTML。
源HTML(name.html
)
<!doctype html> <h1> Hello, <span class="name-output">you</span> ! </h1> <form> <input name="name" placeholder="Your name, please" required /> <button>Submit</button> </form>
PHP用于注入你的名字(index.php
)
<?php use Gt\Dom\HTMLDocument; use Gt\Dom\HTMLElement\HTMLSpanElement; require "vendor/autoload.php"; $html = file_get_contents("name.html"); $document = new HTMLDocument($html); if(isset($_GET["name"])) { $span = $document->querySelector(".name-output"); $span->innerText = $_GET["name"]; } echo $document;
功能速览
- 兼容W3C的DOM Living Standard
Element
类型代表所有HTMLElement
规范,如HTMLAnchorElement
(<a>
)、HTMLButtonElement
(<button>
)、HTMLInputElement
(<input>
)、HTMLTableSectionElement
(<thead>
、<tbody>
、<tfoot>
)等。特定类型可以通过Element::getElementType()
检测,它返回ElementType
枚举值之一。- 扩展
DOMException
以捕获不同类型的异常,例如EnumeratedValueException
、HierarchyRequestError
、IndexSizeException
等。 - 包括
FileList
、StyleSheet
、VideoTrackList
、WindowProxy
等类的客户端功能存根。
- DOM级别4+功能
- 通过
Element::querySelector()
和Element::querySelectorAll()
使用CSS选择器引用元素 - 使用
ClassList
添加/删除/切换元素的类 - 使用
Element::previousElementSibling
、Element::nextElementSibling
、Element::children
、Element::lastElementChild
和Element::firstElementChild
等遍历仅Element节点 - 使用
ChildNode::remove()
、ChildNode::before
、ChildNode::after
、ChildNode::replaceWith()
插入和删除子节点
- 通过
- 在
HTMLDocument
上的标准属性
已知限制 / W3C规范兼容性
此存储库旨在尽可能准确地符合https://dom.spec.whatwg.org/中的DOM规范 - 截至4.0.0版本,所有功能都实现了以下标准之外的微小但不可避免的偏差
- 元素的
tagName
属性是大写的。 - 要检查
HTMLElement
类型,必须调用Element::getElementType()
- 例如,没有Element
的子类可用于与instanceof
一起使用。 - DOM规范定义了仅在客户端可以实现的函数。例如,
HTMLInputElement::files
返回一个FileList
,该列表列出了用户通过浏览器界面选定的所有文件。这种功能在服务器端无法实现,但已为与规范的兼容性提供占位符。尝试在此库中使用客户端功能将抛出ClientSideOnlyFunctionalityException
异常。
数据绑定和页面模板功能
此存储库旨在尽可能符合DOM规范。可在https://php.gt/domtemplate找到存储库的扩展,该扩展通过自定义元素和模板属性添加页面模板和数据绑定功能,引入类似于WebComponents的服务器端功能。