PHP - dom appendChild() - 使用PHP DOM在选定的html标签周围添加字符串

时间:2009-11-25 12:21:21

标签: php dom append

我正在尝试运行一些html并在“A”标记的每个实例周围插入一些自定义标记。我到目前为止,但实际将我的伪标签附加到链接标签的最后一步是躲过我,有人可以提供一些指导吗?

直到最后一行代码 - 这就是我被困住的地方一切都很好。如何在选定的“A”标记的两侧放置这些伪标记?

$dom = new domDocument;
$dom->loadHTML($section);
$dom->preserveWhiteSpace = false;
$ahrefs = $dom->getElementsByTagName('a');
foreach($ahrefs as $ahref) {
    $valueID = $ahref->getAttribute('name');
    $pseudostart = $dom->createTextNode('%%' . $valueID . '%%');
    $pseudoend = $dom->createTextNode('%%/' . $valueID . '%%');
    $ahref->parentNode->insertBefore($pseudostart, $ahref);
    $ahref->parentNode->appendChild($pseudoend);
    $expression[] = $valueID; //^$link_name[0-9a-z_()]{0,3}$
    $dom->saveHTML();
}
//$dom->saveHTML();

我希望能够执行以下操作:

<a href="xxx" name="yyy">text</a> 

变成了

%%yyy%%<a href="xxx" name="yyy">text</a>%%/yyy%%

但目前它似乎没有做任何事情 - 页面输出,但没有替换或节点添加到源。

1 个答案:

答案 0 :(得分:1)

为了确保ahref节点被包裹......

foreach($ahrefs as $ahref) {
    $valueID = $ahref->getAttribute('name');
    $pseudostart = $dom->createTextNode('%%' . $valueID . '%%');
    $pseudoend = $dom->createTextNode('%%/' . $valueID . '%%');
    $ahref->parentNode->insertBefore($pseudostart, $ahref);
    $ahref->parentNode->insertBefore($ahref->cloneNode(true), $ahref); // Inserting cloned element (in order to insert $pseudoend immediately after)
    $ahref->parentNode->insertBefore($pseudoend, $ahref);
    $ahref->parentNode->removeChild($ahref); // Removing old element
}
print $dom->saveXML();