Outils pour utilisateurs

Outils du site


php:classe_domdocument:remplacer_elements_par_autres

Remplacer des éléments par d'autres

À partir d'un code HTML contenant des éléments <span>, remplacer tous les éléments <span> par des éléments <div> :

// Code HTML d'origine
$content = <<< EOT
<p>Paragraphe 1</p>
<span>Ligne de texte 1</span>
<p>Paragraphe 2</p>
<span>Ligne de texte 2</span>
<p>Paragraphe 3</p>
<span>Ligne de texte 3</span>
EOT;
 
// Afficher le contenu HTML d'origine
echo '<pre>';
echo htmlentities($content);
echo '</pre>';
 
// Initialiser l'objet DOMDocument
$dom = new \DOMDocument();
$dom->loadHTML($content);
$dom->formatOutput = true;
 
// Récupérer les éléments 'span'
$spanTags = $dom->getElementsByTagName('span');
 
// Parcourir la liste d'éléments EN PARTANT DE LA FIN
for($i = $spanTags->length; --$i >= 0; ) {
	$spanTag = $spanTags[$i];
 
	// Créer un nouvel élément 'div' et lui donner le même contenu
	// que l'élément 'span'
	$div = $dom->createElement('div', $spanTag->nodeValue);
 
	// Depuis l'élément parent de l'élément 'span', remplacer
	// l'élément 'span' par le nouvel élément 'div'
	$spanTag->parentNode->replaceChild($div, $spanTag);
}
 
// Récupérer l'élément 'body' du document
$body = $dom->getElementsByTagName('body')[0];
 
// Créer la nouvelle version du contenu en exportant l'HTML de
// chaque élément enfant du 'body'
$newContent = '';
foreach($body->childNodes as $child) {
	$newContent .= $dom->saveHTML($child);
}
 
// Afficher le contenu HTML transformé
echo '<pre>';
echo htmlentities($newContent);
echo '</pre>';

Résultat

AVANT :

<p>Paragraphe 1</p>
<span>Ligne de texte 1</span>
<p>Paragraphe 2</p>
<span>Ligne de texte 2</span>
<p>Paragraphe 3</p>
<span>Ligne de texte 3</span>

APRÈS :

<p>Paragraphe 1</p>
<div>Ligne de texte 1</div>
<p>Paragraphe 2</p>
<div>Ligne de texte 2</div>
<p>Paragraphe 3</p>
<div>Ligne de texte 3</div>
php/classe_domdocument/remplacer_elements_par_autres.txt · Dernière modification: 2019/06/16 20:25 (modification externe)