phpgt/dom

现代DOM API。

维护者

详细信息

github.com/PhpGt/Dom

源代码

问题

资助包维护!
PhpGt


README

The modern DOM API for PHP 7 projects

现代DOM API。

该项目基于PHP的本地 DOMDocument,提供了访问现代DOM API的接口,就像在浏览器中处理客户端代码一样。

在服务器端代码中执行DOM操作可以增强构建动态页面的方式。使用标准化的面向对象接口意味着页面可以进行预处理,从而有利于浏览器、Web服务器和内容分发网络。

Build status Code quality Code coverage Current version PHP.Gt/Dom documentation

示例用法:你好,你!

重要提示:这里展示的示例仅用于说明,但使用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以捕获不同类型的异常,例如EnumeratedValueExceptionHierarchyRequestErrorIndexSizeException等。
    • 包括FileListStyleSheetVideoTrackListWindowProxy等类的客户端功能存根。
  • DOM级别4+功能
    • 通过Element::querySelector()Element::querySelectorAll()使用CSS选择器引用元素
    • 使用ClassList添加/删除/切换元素的类
    • 使用Element::previousElementSiblingElement::nextElementSiblingElement::childrenElement::lastElementChildElement::firstElementChild等遍历仅Element节点
    • 使用ChildNode::remove()ChildNode::beforeChildNode::afterChildNode::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的服务器端功能。