我最近需要为一个项目执行此操作,最后扩展到DOMElement:http://www.keyvan.net/2010/07/javascript-like-innerhtml-access-in-php/
这是一个显示如何使用它的示例:
<?php
require_once 'JSLikeHTMLElement.php';
$doc = new DOMDocument();
$doc->registerNodeClass('DOMElement', 'JSLikeHTMLElement');
$doc->loadHTML('<div><p>Para 1</p><p>Para 2</p></div>');
$elem = $doc->getElementsByTagName('div')->item(0);
// print innerHTML
echo $elem->innerHTML; // prints '<p>Para 1</p><p>Para 2</p>'
// set innerHTML
$elem->innerHTML = '<a href="http://fivefilters.org">FF</a>';
// print document (with our changes)
echo $doc->saveXML();
?>
Run Code Online (Sandbox Code Playgroud)
另一个解决方案:
1)从要插入的HTML字符串中创建新的DOMDocumentFragment;2)通过删除元素的子节点来删除元素的旧内容;3)将DOMDocumentFragment附加到我们的元素。
function setInnerHTML($element, $html)
{
$fragment = $element->ownerDocument->createDocumentFragment();
$fragment->appendXML($html);
while ($element->hasChildNodes())
$element->removeChild($element->firstChild);
$element->appendChild($fragment);
}
Run Code Online (Sandbox Code Playgroud)
或者,我们可以将其元素替换为其干净副本,然后将DOMDocumentFragment附加到此克隆中。
function setInnerHTML($element, $html)
{
$fragment = $element->ownerDocument->createDocumentFragment();
$fragment->appendXML($html);
$clone = $element->cloneNode(); // Get element copy without children
$clone->appendChild($fragment);
$element->parentNode->replaceChild($clone, $element);
}
Run Code Online (Sandbox Code Playgroud)
测试:
$doc = new DOMDocument();
$doc->loadXML('<div><span style="color: green">Old HTML</span></div>');
$div = $doc->getElementsByTagName('div')->item(0);
echo $doc->saveHTML();
setInnerHTML($div, '<p style="color: red">New HTML</p>');
echo $doc->saveHTML();
// Output:
// <div><span style="color: green">Old HTML</span></div>
// <div><p style="color: red">New HTML</p></div>
Run Code Online (Sandbox Code Playgroud)
看看这个库 PHP Simple HTML DOM Parser http://simplehtmldom.sourceforge.net/
它看起来非常简单。您可以更改innertext
元素的属性。这可能有帮助。
归档时间: |
|
查看次数: |
20088 次 |
最近记录: |