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