У меня есть Объект DOM с загруженной разметкой HTML. Я пытаюсь заменить все теги embed, которые похожи на это:
<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
}
Легко найти элементы в DOM с помощью getElementsByTagName
. Действительно, вы не захотите приближаться к регулярным выражениям для этого.
Если 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);
}
Edit re edit:
$dom->replaceChild($e, $a); // this line doesn't work
Да, replaceChild
принимает новый элемент для замены в качестве первого аргумента и дочерний элемент, который будет заменен, в качестве второго. Это не тот путь, который вы ожидаете, но он соответствует всем остальным методам DOM. Также это метод родительского узла заменяемого дочернего узла.
(Я использовал class
, а не id
, так как вы не можете иметь несколько элементов на одной странице с именем id="player"
)