PHP DOMDocument 用 HTML 字符串替换 DOMElement 子元素

标签 php dom domdocument

我尝试使用 PHP 获取从所见即所得编辑器传递的 HTML 字符串,并用新的 HTML 替换预加载 HTML 文档中元素的子元素。

到目前为止,我正在加载标识我想通过 ID 更改的元素的文档,但是我无法将 HTML 转换为可以放置在 DOMElement 中的内容。

libxml_use_internal_errors(true);

$doc = new DOMDocument();
$doc->loadHTML($html);

$element = $doc->getElementById($item_id);
if(isset($element)){
    //Remove the old children from the element
    while($element->childNodes->length){
        $element->removeChild($element->firstChild);
    }

    //Need to build the new children from $html_string and append to $element
}

最佳答案

如果HTML字符串可以解析为XML,可以这样做(清除所有子节点的元素后):

$fragment = $doc->createDocumentFragment();
$fragment->appendXML($html_string);
$element->appendChild($fragment);

如果 $html_string 不能解析为 XML,它将失败。如果是这样,您将不得不使用 loadHTML(),它不太严格 — 但它会在您必须去除的片段周围添加元素。

与 PHP 不同,Javascript 具有 innerHTML 属性,可让您轻松完成此操作。我的项目需要类似的东西,所以我扩展了 PHP 的 DOMElement 以包含类似 Javascript 的 innerHTML 访问。

有了它,您可以像在 Javascript 中一样访问 innerHTML 属性并更改它:

echo $element->innerHTML;
$elem->innerHTML = '<a href="http://example.org">example</a>';

来源:http://www.keyvan.net/2012/11/php-domdocument-replace-domelement-child-with-html-string/

关于PHP DOMDocument 用 HTML 字符串替换 DOMElement 子元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2233683/

相关文章:

php - 显示/隐藏文本框

javascript - 如何使用 JavaScript 访问文件元素的文件属性

php - 使用 getElementById 从 <select> 获取所有 <option>

php - 通过 DOM 或 XPATH 获取每个元素属性的宽度和高度

php - 为目录树动态创建下载链接

php - 将查询结果作为数组返回

javascript - 撤消 JS 中的 dom 更改

javascript - 使元素中的所有链接将新内容加载到同一元素中

javascript - 抓取javascript生成的网页数据

php - 使用两列自动递增(laravel 4.1)