softcreatr / html5-dom-document-php
HTML5 DOMDocument PHP 库(扩展 DOMDocument)
3.0.0
2024-09-18 10:23 UTC
README
HTML5DOMDocument 扩展了 PHP 中的原生 DOMDocument 类。它修复了一些长期存在的问题,并为处理 HTML5 文档引入了额外的现代功能。
为什么使用 HTML5DOMDocument?
- 保留 HTML 实体,这是原生 DOMDocument 无法正确处理的。
- 保留空元素,如
<input>
或<br>
,DOMDocument 倾向于错误处理。 - 允许正确地将 HTML 代码 插入 到文档中,确保 head 和 body 元素放置在其相应的部分。
- 启用用于查询 DOM 的 CSS-style selectors
- 支持的选择器包括
*
、tagname
、tagname#id
、#id
、tagname.classname
、.classname
、多个类选择器、属性选择器,以及复杂的如div p
、div > p
、div + p
、p ~ ul
和div, p
的选择器。
- 支持的选择器包括
- 使用以下方式对元素进行操作
element->classList
用于操作类element->innerHTML
用于处理元素的内部内容element->outerHTML
用于将整个元素作为字符串进行操作
- 通过高级 HTML 插入和验证高效处理重复元素和 ID
通过 Composer 安装
使用以下命令通过 Composer 安装
composer require "softcreatr/html5-dom-document-php:3.*"
功能 & 改进
- classList 支持:库通过
classList
属性添加了对元素类的操作支持,使得处理 CSS 类属性更加容易。 - 增强查询选择器:使用类似 CSS 的先进选择器从 DOM 查询元素,例如
div > p
(直接子元素)div + p
(相邻兄弟元素)p ~ ul
(一般兄弟元素)[attribute]
、[attribute=value]
等。
- HTML 插入:它允许将 HTML 片段插入到文档中,智能地将它们放置在正确的位置(例如,将脚本插入到
<head>
中,将内容插入到<body>
中)。 - 自定义插入目标:在文档中定义自定义目标,以便精确插入 HTML。
文档
在存储库中有全面的 文档。
示例
基本用法
像原生 DOMDocument 一样使用 HTML5DOMDocument
<?php require 'vendor/autoload.php'; $dom = new \SoftCreatR\HTML5DOMDocument\HTML5DOMDocument(); $dom->loadHTML('<!DOCTYPE html><html><body>Hello World!</body></html>'); echo $dom->saveHTML();
使用 CSS 选择器进行查询
$dom = new \SoftCreatR\HTML5DOMDocument\HTML5DOMDocument(); $dom->loadHTML('<!DOCTYPE html><html><body><h1>Hello</h1><div class="content">This is some text</div></body></html>'); echo $dom->querySelector('h1')->innerHTML; // Outputs: Hello echo $dom->querySelector('.content')->outerHTML; // Outputs: <div class="content">This is some text</div>
插入 HTML 代码
$dom = new \SoftCreatR\HTML5DOMDocument\HTML5DOMDocument(); $dom->loadHTML(' <!DOCTYPE html> <html> <head><style>body { color: red; }</style></head> <body><h1>Hello</h1></body> </html> '); $dom->insertHTML(' <html> <head><script>alert("JS Script")</script></head> <body><div>This is some text</div></body> </html> '); echo $dom->saveHTML(); // Properly merges new elements into the existing head and body.
操作类属性
$dom = new \SoftCreatR\HTML5DOMDocument\HTML5DOMDocument(); $dom->loadHTML('<div class="class1"></div>'); $div = $dom->querySelector('div'); $div->classList->add('class2'); $div->classList->remove('class1'); echo $div->getAttribute('class'); // Outputs: "class2"
自定义插入目标
$dom = new \SoftCreatR\HTML5DOMDocument\HTML5DOMDocument(); $dom->loadHTML('<html><body><div id="main"></div></body></html>'); $mainDiv = $dom->querySelector('#main'); $mainDiv->appendChild($dom->createInsertTarget('name1')); $dom->insertHTML('<div id="new-content">New content</div>', 'name1'); echo $dom->saveHTML();
许可
本项目采用 MIT 许可证。有关更多详细信息,请参阅 许可证文件。
贡献
欢迎贡献!请随意打开问题或提交拉取请求以改进此库。让我们合作使其变得更好。
作者
- 原始库由 Ivo Petkov 创建。
- V3 和持续维护由 Sascha Greuel 负责。