gpt4 book ai didi

html - PHP DomNode->insertBefore()

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:06:06 27 4
gpt4 key购买 nike

我正在尝试在我的 html 字符串中插入节点。我的目标是在每个 h2 标签之前插入一个元素。

为此,我正在使用:

$htmlString = "<h2>some html</h2>";

$DOM = new DOMDocument();
$DOM->loadHTML($htmlString);

$itemTitles = $DOM->getElementsByTagName('h2');

for($i = 0; $i < $itemTitles->length; $i ++)
{
$helpNavigatorContents[] = $itemTitles->item($i)->nodeValue;
$textBefore = new DOMNode(
'<a name="'.$itemTitles->item($i)->nodeValue.'"></a>'
);
$itemTitles->item($i)->parentNode->insertBefore(
$textBefore,
$itemTitles->item($i)
);
}

$htmlString = $DOM->saveHTML($DOM);

这里我遇到了 $textBefore 的问题。当我将 $textBefore 声明为 DOMText 时,我可以在节点之前插入文本,但是当我尝试使用 DOMNode 时,我是出现以下错误 ( Demo ):

Warning: DOMNode::insertBefore(): Couldn't fetch DOMNode

最佳答案

代码没有任何意义。 DOMNode 没有构造函数。它根本不应该被创建。您应该通过 DOMDocument 创建特定的节点类型,使它们与文档相关联。

假设你想在所有 H2 元素前添加一个 anchor ,这是如何做到的:

libxml_use_internal_errors(true);
$DOM = new DOMDocument();
$DOM->loadHTML($htmlString);
$DOM->preserveWhiteSpace = false;

foreach ($DOM->getElementsByTagName('h2') as $h2) {
$a = $DOM->createElement('a');
$a->setAttribute('name', $h2->nodeValue);
$h2->parentNode->insertBefore($a, $h2);
}
$DOM->formatOutput = true;
echo $DOM->saveHTML();

演示 http://codepad.org/N0dPcLwT

要将 H2 元素包装到 A 元素中,只需执行相同的操作并添加

$a->appendChild($h2);

演示 http://codepad.org/w7Hi0Bmz

关于html - PHP DomNode->insertBefore(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12641523/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com