我有一个带有HTML标记的DOM对象。我正在尝试替换所有类似的嵌入式代码:
<embed allowfullscreen="true" height="200" src="path/to/video/1.flv" width="320"></embed>
使用这样的标记:
<a
href="path/to/video/1.flv"
style="display:block;width:320px;height:200px;"
id="player">
</a>
我在解决这个问题时遇到了麻烦,我不想为此使用正则表达式。你能救我一下吗?
编辑:
这是我到目前为止所做的:
// DOM initialized above, not important
foreach ($dom->getElementsByTagName('embed') as $e) {
$path = $e->getAttribute('src');
$width = $e->getAttribute('width') . 'px';
$height = $e->getAttribute('height') . 'px';
$a = $dom->createElement('a', '');
$a->setAttribute('href', $path);
$a->setAttribute('style', "display:block;width:$width;height:$height;");
$a->setAttribute('id', 'player');
$dom->replaceChild($e, $a); // this line doesn't work
}
答案 0 :(得分:35)
使用getElementsByTagName
很容易从DOM中找到元素。事实上,你不想接近正则表达式。
如果您正在谈论的DOM是PHP DOMDocument
,您可以执行以下操作:
$embeds= $document->getElementsByTagName('embed');
foreach ($embeds as $embed) {
$src= $embed->getAttribute('src');
$width= $embed->getAttribute('width');
$height= $embed->getAttribute('height');
$link= $document->createElement('a');
$link->setAttribute('class', 'player');
$link->setAttribute('href', $src);
$link->setAttribute('style', "display: block; width: {$width}px; height: {$height}px;");
$embed->parentNode->replaceChild($link, $embed);
}
编辑重新编辑:
$dom->replaceChild($e, $a); // this line doesn't work
是的,replaceChild
将新元素替换为 - 作为第一个参数,将要替换的子元素替换为第二个参数。这不是您可能期望的方式,但它与所有其他DOM方法一致。此外,它还是要替换子节点的父节点的方法。
(我使用class
而不是id
,因为您在同一页面上不能有多个名为id="player"
的元素。)