softcreatr/html5-dom-document-php

3.0.0 2024-09-18 10:23 UTC

This package is auto-updated.

Last update: 2024-09-18 10:24:35 UTC


README

HTML5DOMDocument 扩展了 PHP 中的原生 DOMDocument 类。它修复了一些长期存在的问题,并为处理 HTML5 文档引入了额外的现代功能。

Latest Stable Version License

为什么使用 HTML5DOMDocument?

  • 保留 HTML 实体,这是原生 DOMDocument 无法正确处理的。
  • 保留空元素,如 <input><br>,DOMDocument 倾向于错误处理。
  • 允许正确地将 HTML 代码 插入 到文档中,确保 head 和 body 元素放置在其相应的部分。
  • 启用用于查询 DOM 的 CSS-style selectors
    • 支持的选择器包括 *tagnametagname#id#idtagname.classname.classname、多个类选择器、属性选择器,以及复杂的如 div pdiv > pdiv + pp ~ uldiv, 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 许可证。有关更多详细信息,请参阅 许可证文件

贡献

欢迎贡献!请随意打开问题或提交拉取请求以改进此库。让我们合作使其变得更好。

作者